Tensorflow 向LSTM提供CNN功能
我想建立一个端到端的可培训模型,具备以下特性:Tensorflow 向LSTM提供CNN功能,tensorflow,keras,lstm,Tensorflow,Keras,Lstm,我想建立一个端到端的可培训模型,具备以下特性: CNN从图像中提取特征 特征被重塑为矩阵 然后将该矩阵的每一行馈送至LSTM1 然后将该矩阵的每列馈送至LSTM2 将LSTM1和LSTM2的输出串联起来以获得最终输出 (与本文中的图2大致相似:) 我现在的问题是在重塑之后,如何使用Keras或Tensorflow将特征矩阵的值提供给LSTM 这是到目前为止我在VGG16 net上的代码(也是到的链接): 考虑使用Conv2D和MaxPool2D层构建CNN模型,直到到达展平层,因为展平层的矢
- CNN从图像中提取特征
- 特征被重塑为矩阵
- 然后将该矩阵的每一行馈送至LSTM1
- 然后将该矩阵的每列馈送至LSTM2
- 将LSTM1和LSTM2的输出串联起来以获得最终输出
考虑使用Conv2D和MaxPool2D层构建CNN模型,直到到达展平层,因为展平层的矢量化输出将是结构的LSTM部分的输入数据 因此,构建您的CNN模型如下:
model_cnn = Sequential()
model_cnn.add(Conv2D...)
model_cnn.add(MaxPooling2D...)
...
model_cnn.add(Flatten())
现在,这是一个有趣的观点,Keras的当前版本与一些TensorFlow结构不兼容,这些结构不允许将整个层堆叠在一个连续对象中
因此,现在是使用Keras模型对象完成神经网络的时候了:
input_lay = Input(shape=(None, ?, ?, ?)) #dimensions of your data
time_distribute = TimeDistributed(Lambda(lambda x: model_cnn(x)))(input_lay) # keras.layers.Lambda is essential to make our trick work :)
lstm_lay = LSTM(?)(time_distribute)
output_lay = Dense(?, activation='?')(lstm_lay)
最后,现在是将我们的两个独立模型组合在一起的时候了:
model = Model(inputs=[input_lay], outputs=[output_lay])
model.compile(...)
OBS:请注意,一旦VGG展平层的矢量化输出将成为LSTM模型的输入,您可以用VGG替换我的cnn模型示例,而不包括顶层。考虑使用Conv2D和MAXPOL2D层构建cnn模型,直到到达展平层,因为展平层的矢量化输出将是结构的LSTM部分的输入数据 因此,构建您的CNN模型如下:
model_cnn = Sequential()
model_cnn.add(Conv2D...)
model_cnn.add(MaxPooling2D...)
...
model_cnn.add(Flatten())
现在,这是一个有趣的观点,Keras的当前版本与一些TensorFlow结构不兼容,这些结构不允许将整个层堆叠在一个连续对象中
因此,现在是使用Keras模型对象完成神经网络的时候了:
input_lay = Input(shape=(None, ?, ?, ?)) #dimensions of your data
time_distribute = TimeDistributed(Lambda(lambda x: model_cnn(x)))(input_lay) # keras.layers.Lambda is essential to make our trick work :)
lstm_lay = LSTM(?)(time_distribute)
output_lay = Dense(?, activation='?')(lstm_lay)
最后,现在是将我们的两个独立模型组合在一起的时候了:
model = Model(inputs=[input_lay], outputs=[output_lay])
model.compile(...)
OBS:请注意,一旦VGG展平层的矢量化输出将成为LSTM模型的输入,您可以用VGG替换我的模型\u cnn示例,而不包括顶层。这是否可行?这是否可行?