我希望实现一个RNN和一个CNN,以便根据两个图像进行预测,而不是一个单独的CNN。 我正在尝试修改alexnet模型代码:
def alexnet(width, height, lr, output=3):
network = input_data(shape=[None, width, height, 1], name='input')
network = conv_2d(network, 96, 11, strides=4, activation='relu')
network = max_pool_2d(network, 3, strides=2)
network = local_response_normalization(network)
network = conv_2d(network, 256, 5, activation='relu')
network = max_pool_2d(network, 3, strides=2)
network = local_response_normalization(network)
network = conv_2d(network, 384, 3, activation='relu')
network = conv_2d(network, 384, 3, activation='relu')
network = conv_2d(network, 256, 3, activation='relu')
network = max_pool_2d(network, 3, strides=2)
network = local_response_normalization(network)
network = fully_connected(network, 4096, activation='tanh')
network = dropout(network, 0.5)
network = fully_connected(network, 4096, activation='tanh')
network = dropout(network, 0.5)
network = fully_connected(network, output, activation='softmax')
network = regression(network, optimizer='momentum',
loss='categorical_crossentropy',
learning_rate=lr, name='targets')
model = tflearn.DNN(network, checkpoint_path='model_alexnet',
max_checkpoints=1, tensorboard_verbose=0, tensorboard_dir='log')
return model
我有一个np数组中的图像,其中每个元素是一个图像的像素数据。我在实现RNN中使用两个映像的功能时遇到问题
我看过tflearn的重塑和lstm方法,我认为应该将它们放在最终完全连接的层之前,但不确定如何指定要使用的图像数量
此外,这是否更容易在Keras中实现
如果我理解正确,您需要执行以下操作。设
model
为网络,将一系列图像作为输入并返回预测。使用finctional API,其示意图如下所示:在
processing part
中,您希望获得每个图像的编码,然后使用RNN将它们作为序列进行分析作为第一步,您需要获得所有图像的编码。设
encoder
是为单个图像进行编码的网络,返回enc_dim
维编码。为了有效地获得所有图像的编码,请注意,在训练期间model
使用形状(batch-size,number-of-images,shape-of-images)
处理数据。因此,您总共有total-number-of-images
=(批量大小)x(图像数量)个图像。要处理它们,请将input_data
重塑为具有维度(图像总数、图像形状),如下所示:并通过
encoder
传递它们:这将生成格式为(图像总数,enc_dim)的输出。要处理编码,您需要恢复批量大小维度。这很容易做到:
正如预期的那样,它会将数据重塑为(批量大小、图像数量、尺寸)。该数据可由RNN层或其组合容易地处理。例如,对于单个LSTM层
预测结果如下所示:
rnn_encodings
可被致密层进一步用于进行最终预测通过将上述内容放在
model
的processing part
中,您将达到目标相关问题 更多 >
编程相关推荐