数据分析师养成之路之keras篇:提取bottleneck

提取bottleneck小结:
提取bottleneck的时候,遇到了一个大坑,flatten()那里的size貌似总也改不对
后来重新思考,我要做什么?提取bottleneck 特征啊,仅仅是提取特征而已,我为什么要compile,
为什么要fit?model再经过compile和fit 后,再进行predict,得到的是y_pred,而不是我要的bottleneck 了,所以,compile和fit这个过程就不需要的!

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

y_train = to_categorical(y_train, nb_classes)
y_test = to_categorical(y_test, nb_classes)
# 输入维度 :N*32*32*3
x = Input(shape=(32, 32, 3))
y = x
y = Convolution2D(filters=64, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = Convolution2D(filters=64, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = MaxPooling2D(pool_size=2, strides=2, padding='valid')(y)

y = Convolution2D(filters=128, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = Convolution2D(filters=128, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = MaxPooling2D(pool_size=2, strides=2, padding='valid')(y)

y = Convolution2D(filters=256, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = Convolution2D(filters=256, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = MaxPooling2D(pool_size=2, strides=2, padding='valid')(y)
 # N*8*8*128  模型的输出维度
model=Model(input=x,output=y,name='model')

之后,开始提取bottleneck
输入:5000 *32*32*3 ,输出:5000*8*8*128

# 输入维度 5000*32*32*3
bottleneck_features_train = model.predict(X_train, 1000)
np.save(open('/home/mmhang/桌面/wang/bottleneck_features_train.npy', 'wb+'), bottleneck_features_train)

bottleneck_features_test = model.predict(X_test, 500)
np.save(open('/home/mmhang/桌面/wang/bottleneck_features_test.npy', 'wb+'), bottleneck_features_test)
print(bottleneck_features_train.shape)
#(5000, 8, 8, 128) bottlenect特征的维度

之后,用我们的bottleneck 特征做训练吧!
注意,这个时候,我们的model才需要compile和fit!

train_data=np.load(open('/home/mmhang/桌面/wang/bottleneck_features_train.npy','rb'))
test_data=np.load(open('/home/mmhang/桌面/wang/bottleneck_features_test.npy','rb'))

model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_data, y_train,
          nb_epoch=50, batch_size=32,
          validation_data=(test_data, y_test))
model.save_weights('bottleneck_fc_model.h5')

猜你喜欢

转载自blog.csdn.net/lulujiang1996/article/details/81133417
今日推荐