Есть ли метод Reshape для исправления размера массива? - PullRequest
0 голосов
/ 26 марта 2019

Моя проблема здесь в том, что я хочу сделать количество входных каналов в python равным размеру фильтров

вот код того, что я пробовал

я уже пытался изменить форму, но это дает мне ту же ошибку .. и, поскольку я новичок в python, я не мог понять, как исправить свою ошибку. Моя модель состоит в комбинировании cnn со слоем lstm, и у меня есть 2892 тренировочных образа и 1896 тестовых изображений, всего 4788 изображений каждое изображение размером 128 * 128

cnn_model = Sequential()

cnn_model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3),data_format='channels_last'))
print (cnn_model.output_shape)
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
print (cnn_model.output_shape)
cnn_model.add(Conv2D(32, (3, 3), activation='relu',data_format='channels_last'))
print (cnn_model.output_shape)
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
print (cnn_model.output_shape)

cnn_model.add(Conv2D(64, (3, 3), activation='relu',data_format='channels_last'))
print (cnn_model.output_shape)
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
print (cnn_model.output_shape)

cnn_model.add(Conv2D(128, (3, 3), activation='relu',data_format='channels_last'))
print (cnn_model.output_shape)
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
print ("MP",cnn_model.output_shape)
cnn_model.add(Flatten())
print (cnn_model.output_shape)
cnn_model.summary()
model = Sequential()
model.add(cnn_model)
print (model.output_shape)
model.add(Reshape((4608,1)))
model.add(LSTM(16,return_sequences=True, dropout=0.5))
print ("LSTM",model.output_shape)

model.add(Dense(1, activation='softmax'))

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

X_data = np.array(X_data)
X_datatest = np.array(X_datatest)
model.add(Reshape((-1,128,128,3)))
hist=model.fit(X_data, X_data,epochs=15,batch_size=128,verbose = 2,validation_data=(X_data, X_data))

но я получаю следующую ошибку

Traceback (последний вызов был последним): File «C: \ Users \ bdyssm \ Desktop \ Master \ LSTMCNN2.py», строка 193, в model.add (Reshape ((2892,1))) Файл "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ sequential.py", строка 181, в добавлении output_tensor = layer (self.outputs [0]) Файл "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ base_layer.py", линия 474, вызов output_shape = self.compute_output_shape (input_shape) Файл "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ layer \ core.py", строка 398, в compute_output_shape input_shape [1:], self.target_shape) Файл "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ layer \ core.py", строка 386, в _fix_unknown_dimension повысить ValueError (msg) ValueError: общий размер нового массива должен быть неизменным

1 Ответ

0 голосов
/ 26 марта 2019

После добавления плотного слоя, выходная форма будет: (None, 4608, 1), поэтому общий размер будет batch_size * 4608

Но затем вы захотите добавить слой Reshape Reshape((-1,128,128,3)), общий размер которого будетbatch_size * 128 * 128 * 3 = batch_size * 49152

Вот где ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...