как проверить несовместимость формы в python

#python #tensorflow #keras #deep-learning #lstm

#python #tensorflow #keras #глубокое обучение #lstm

Вопрос:

я новичок в python. я изучаю lstm. всякий раз, когда я пытаюсь применить подходящую модель, я получаю эту ошибку ValueError: Shapes (2, 3) and (2, 173, 3) are incompatible

Вот код для воспроизведения ошибки

 epochs = 60
batch_size = 2
lstm_units = 100
dense_units = 50

datafile_Xtrain = '.../train_H.csv'
dfTrX = read_csv(datafile_Xtrain, header=0)
valuesTrX = dfTrX.values
num_observationsTrX = valuesTrX.shape[0]
num_timestampsTrX = valuesTrX.shape[1]
train_X = valuesTrX.reshape((num_observationsTrX, num_timestampsTrX, 1))

# -- Input Y training  -----
datafile_Ytrain = '.../H.csv'
dfTrY = read_csv(datafile_Ytrain, header=0)
dfTrY.fillna(0)
valuesTrY = dfTrY.values
num_observationsTrY = valuesTrY.shape[0]
num_classesTrY = valuesTrY.shape[1]
train_Y = valuesTrY.reshape((num_observationsTrY, num_classesTrY))

model = Sequential()
model.add(LSTM(lstm_units, input_shape=(num_timestampsTrX,1), return_sequences=True))
model.add(Dense(dense_units, activation='relu'))
model.add(Dense(num_classesTrY , activation='softmax'))
model.compile(loss=tf.keras.losses.categorical_crossentropy, optimizer='adam', metrics=['accuracy'])

model.fit(train_X, train_Y ,epochs=epochs, batch_size=batch_size, verbose=0, validation_split=0.1,shuffle=False)
print('Model fit successfully')```
 

Скриншот моего проводника переменных, если это может помочь :
Я также добавляю скриншот моего проводника переменных

Ответ №1:

Если вы не хотите возвращать последовательности, например (2, 173, 3) , а вместо этого 2D-массив, например (2, 3) , как в задаче классификации, вам нужно установить

 return_sequences=False
 

В вашем слое LSTM.

Комментарии:

1. Я внес некоторые изменения, но все равно получил такую же ошибку. Моя модель lstm ……model = Sequential() model.add(LSTM(200, input_shape=(num_timestamps,1), return_sequences=True)) model.add(LSTM(173, activation=’relu’, return_sequences=True)) model.add(плотный(173, активация = ‘relu’)) model.add(Плотный (1, активация = ‘softmax’)) model.compile(потеря = ‘categorical_crossentropy’, оптимизатор = ‘adam’, метрики =[‘точность’]) # — Fit история моделей=model.fit(train_X, Y, batch_size=batch_size, validation_data=(test_X, test_Y),verbose=0)

2. Ошибка значения: ввод 0 слоя sequential_32 несовместим со слоем: ожидаемый ndim=3, найдено ndim=2. Получена полная форма: [Нет, 173]