基于keras2.0 + tensorflow1.2 + GP

作者: 梅花鹿数据 | 来源:发表于2018-02-16 12:28 被阅读407次

一: 前言

这次是利用的keras 2.08 版本配合tensorflow 1.2 + GPU 进行的CNN 猫狗二分类识别训练(根据相关demo学习修改),keras的2.x和之前的1.x版本有很多不同,查看更新 所以之前的很多代码需要修改才可以在keras2.x上使用。

二:运行环境

建议使用anaconda 科学环境包,安装tensorflow和tensorflow-gpu的时候会给安装相关模块,十分方便。另外我用的是 Nvidia 显卡,所以可以使用gpu加速训练,是使用cpu训练速度10倍以上。

  • Windows i5 7500 + 16g内存 + GTX 1050 Ti
  • CUDA 8.0 + cudnn
  • Anaconda Python3.6
  • keras 2.08
  • tensorflow 1.2
  • tensorflow-gpu 1.1

三:代码分析

数据结构

data/
    train/
        dogs/
            dog001.jpg
            ...
        cats/
            cat001/jpg
            ...
    validation/
        dogs/
            dog001.jpg
            ...
        cats/
            cat001/jpg
            ...

训练模块

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(150, 150,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64,(3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# the model so far outputs 3D feature maps (height, width, features)

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
test_datagen = ImageDataGenerator(rescale=1. / 255)

# this is a generator that will read pictures found in
# subfolers of 'data/train', and indefinitely generate
# batches of augmented image data
train_generator = train_datagen.flow_from_directory(
    'data/train',  # this is the target directory
    target_size=(150, 150),  # all images will be resized to 150x150
    batch_size=32,
    class_mode='binary')  # since we use binary_crossentropy loss, we need binary labels

# this is a similar generator, for validation data
validation_generator = test_datagen.flow_from_directory(
    'data/validation',
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary')

model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=30,
        validation_data=validation_generator,
        validation_steps=800)
json_string = model.to_json()
model.save('cat_dog_model_30*2000.h5')
model.save_weights('cat_dog_weights_30*2000.h5')
# loss是训练集损失值. acc是训练集准确率。val_loss是测试集上的损失值,val_acc是测试集上的准确率。

相关文章

网友评论

  • sunlin1234:可以啊,学习知识面够广的
    sunlin1234:@sunlin1234 哈哈。看了。你的文章,觉得你很不错,关注一下,顺便学习学习。
    梅花鹿数据:@sunlin1234 多学一点,方便后面校招~ 新年快乐哟,你是今年第一个评论的,感谢。
  • 梅花鹿数据:之前练习的demo 一直忘了发布....

本文标题:基于keras2.0 + tensorflow1.2 + GP

本文链接:https://www.haomeiwen.com/subject/koojjxtx.html