转zihttps://blog.youkuaiyun.com/nima1994/article/details/79951445
keras分类猫狗数据(上)数据预处理
keras分类猫狗数据(中)使用CNN分类模型
keras分类猫狗数据(下)迁移学习
keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类
1 . 如下代码,数据增强,并根据文件夹创建数据流(我的保存为了catvsdogs/morph.py
)。
from keras.preprocessing.image import ImageDataGenerator
train_dir="E:/MLdata/kaggle_Dogsvs.Cats/min_trainfordata/train"
test_dir="E:/MLdata/kaggle_Dogsvs.Cats/min_trainfordata/test"
train_pic_gen=ImageDataGenerator(rescale=1./255,rotation_range=20,width_shift_range=0.2,height_shift_range=0.2,
shear_range=0.2,zoom_range=0.5,horizontal_flip=True,fill_mode='nearest')
test_pic_gen=ImageDataGenerator(rescale=1./255)
train_flow=train_pic_gen.flow_from_directory(train_dir,(128,128),batch_size=32,class_mode='binary')
test_flow=test_pic_gen.flow_from_directory(test_dir,(128,128),batch_size=32,class_mode='binary')
# print(train_flow.class_indices)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
2 .构建模型并训练
from keras.models import Sequential
from keras.layers import Convolution2D,MaxPool2D,Flatten,Dense,Dropout
from keras.callbacks import TensorBoard
model=Sequential([
Convolution2D(32,3,3,input_shape=(128,128,3),activation='relu'),
MaxPool2D(pool_size=(2,2)),
Convolution2D(64,3,3,input_shape=(128,128,3),activation='relu'),
MaxPool2D(pool_size=(2,2)),
Flatten(),
Dense(64,activation='relu'),
Dropout(0.5),
Dense(1,activation='sigmoid')
])
model.summary()
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
import catvsdogs.morph as morph#引用上文1的数据增加代码
model.fit_generator(
morph.train_flow,steps_per_epoch=100,epochs=50,verbose=1,validation_data=morph.test_flow,validation_steps=100,
callbacks=[TensorBoard(log_dir='./logs/1')]
)
model.save('outputs/catdogs_model.h5')