Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 向LSTM提供CNN功能_Tensorflow_Keras_Lstm - Fatal编程技术网

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的输出串联起来以获得最终输出
(与本文中的图2大致相似:)

我现在的问题是在重塑之后,如何使用Keras或Tensorflow将特征矩阵的值提供给LSTM

这是到目前为止我在VGG16 net上的代码(也是到的链接):


考虑使用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示例,而不包括顶层。

这是否可行?这是否可行?