Так что недавно я работаю над проектом, который должен принимать изображения в качестве входных данных для CNN, извлекать функции и передавать их в LSTM для обучения. Я использую 2 Layer CNN для извлечения объектов, и я беру объекты из полностью связанного слоя и пытаюсь передать их в LSTM. Проблема в том, что когда я хочу передать слой FC в LSTM в качестве входных данных, я получаю ошибку, касающуюся неверного измерения Мой слой FC - Тензор с (128,1024) измерением. Я попытался изменить его следующим образом: tf.reshape (fc, [- 1]), который дает мне тензор в порядке (131072,)
размер и до сих пор не будет работать. Может ли кто-нибудь дать мне какие-либо идеи о том, как я должен передать ФК в LSTM? Здесь я просто пишу часть своего кода и получаю ошибку.
Сверточный слой с 32 фильтрами и размером ядра 5
conv1 = tf.layers.conv2d(x, 32, 5, activation=tf.nn.relu)
# Max Pooling (down-sampling) with strides of 2 and kernel size of 2
conv1 = tf.layers.max_pooling2d(conv1, 2, 2)
# Convolution Layer with 32 filters and a kernel size of 5
conv2 = tf.layers.conv2d(conv1, 64, 3, activation=tf.nn.relu)
# Max Pooling (down-sampling) with strides of 2 and kernel size of 2
conv2 = tf.layers.max_pooling2d(conv2, 2, 2)
# Flatten the data to a 1-D vector for the fully connected layer
fc1 = tf.contrib.layers.flatten(conv2)
# Fully connected layer (in contrib folder for now)
fc1 = tf.layers.dense(fc1, 1024)
# Apply Dropout (if is_training is False, dropout is not applied)
fc1 = tf.layers.dropout(fc1, rate=dropout, training=is_training)
s = tf.reshape(fc1, [1])
rnn_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0)
outputs, states = rnn.static_rnn(rnn_cell, s, dtype=tf.float32)
return tf.matmul(outputs[-1], rnn_weights['out']) + rnn_biases['out']
вот ошибка:
ValueError: Невозможно изменить тензор с 131072 элементами в форму [1] (1 элемент) для 'ConvNet / Reshape' (op: 'Reshape') с входными формами: [128,1024], [1] и с входными тензорами, вычисленными как частичные фигуры: input [1] = [1].