服务

时间:2017-08-03 02:42:50

标签: python numpy tensorflow keras tensorflow-serving

我在Keras运行自定义CNN模型,

img_width, img_height = 150, 150

nb_train_samples = 213
nb_validation_samples = 212
epochs = 200
batch_size = 32

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3) 

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
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)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(5))
model.add(Activation('softmax'))

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

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='categorical')

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size)

当我为模型服务时,我得到了波动的结果,即每次我尝试预测时,对于同一图像,它给出了不同的概率和变化是非常激烈的。

我有以下疑惑,是因为

  • 小型培训/测试数据集(约400张图片,我甚至使用数据扩充)
  • 输入图像形状(甚至尝试使用500x500,开始给我偏差的结果,或者是否有任何固定的图像尺寸,如VGG16中的224x224以获得更好的性能)
  • 与其他类别相比,某些类别的数据集非常少
  • 我是否需要添加更多Convolution&合并图层
  • 我也尝试过ADAM和SGD优化器,结果几乎相同
  • 每次训练模型时,顺序模型是否初始化随机权重 model.get_weights()?尝试使用 numpy.random.seed(1337)修复此问题,某些图片的波动得到修复。
  • 此外,当尝试不同的方法时,有时会失去射击,而精确度仍然是~80%。

我正在得到这样的预测结果,

  1. [[“TypeA”,0.9999998807907104],[“TypeB”,6.756409476338376e-08],[“TypeC”,6.077736847693585e-18]]
  2. [[“TypeC”,1.0],[“TypeB”,9.148046586956293e-35],[“TypeA”,0.0]]
  3. [[“TypeB”,1.0],[“TypeC”,0.0],[“TypeA”,0.0]]
  4. 使用Tensorflow会话包导出器将模型保存为检查指向文件,并使用Tensorflow服务进行提供。

0 个答案:

没有答案