keras在vgg16功能上训练LSTM模型

时间:2018-07-12 15:37:02

标签: python tensorflow keras lstm

正在创建异常行为检测模型,因此为此目的,使用vgg16预训练模块提取特征,因此使用fc2层来获取我得到的特征(1,4096)作为这些特征的形状,< / p>

base_model = VGG16(weights=weights, include_top=include_top)
base_model.compile(optimizer=SGD(), loss='categorical_crossentropy', metrics=['accuracy'])
model = Model(input=base_model.input, output=base_model.get_layer('fc2').output)
print(model.summary())
image_size = (224, 224)

这是我定义vgg16模型并使用最后一个softmax激活层之前的预测获取功能的方式。

img = np.array(cv2.resize(image, image_size))
x = img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
feature = model.predict(x)

和,当寻找特征的形状时,

print feature.shape
  

我得到:,(1,4096)

,这里使用双向LSTM解决顺序分类问题,这是这类探针的常规方法,但是根据keras文档,LSTM采取三维训练样本,以适合(224, 224, 3)这样的样本,但是仅获得一维特征,因此可以在上述提取特征的维度上训练LSTM,还是有其他替代解决方案,例如将特征重塑为3D通道,但由于特征长度而无法实现,并且还需要更多特征长度以将其重塑为(224, 224, 3)

model = Sequential()
model.add(Bidirectional(LSTM(units=HIDDEN_UNITS, return_sequences=True),
                        input_shape=(self.expected_frames, self.num_input_tokens)))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(self.nb_classes))

model.add(Activation('softmax'))

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

0 个答案:

没有答案