Error when checking target: expected dense_2 to have shape (1,) but got array with shape (3,)
import numpy as np
x_train,y_train = np.load('datsx.npy'),np.load('datsy.npy')
wb = None
from keras.models import Sequential
from keras.layers import Dense
# Среднее значение
mean = x_train.mean(axis=0)
# Стандартное отклонение
std = x_train.std(axis=0)
x_train -= mean
x_train /= std
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(x_train.shape[1],)))#shape 1
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.fit(x_train, y_train, epochs=100, batch_size=1, verbose=2)
Error when checking target: expected dense_2 to have shape (1,) but got array with shape (3,)
Как исправить тут ошибку?
Пример данных:
x_train = array(
[[1.3590000e+03, 1.3180000e+03, 1.7082020e+07, 1.2000000e+03],
[4.0380000e+03, 4.6170000e+03, 1.7082020e+07, 1.2000000e+03], [2.6300000e+03,
3.9840000e+03, 1.7082020e+07, 1.0540000e+03], [3.4460000e+03, 4.5310000e+03,
1.8102014e+07, 2.1610000e+03], [9.1500000e+02, 4.5310000e+03, 1.8102014e+07,
2.1610000e+03], [3.4460000e+03, 4.4570000e+03, 1.8102014e+07, 2.1610000e+03]])
y_train = array(
[[ 1., 2., 2.], [ 1., 2., 2.], [ 1., 2., 2.],
[16., 2., 1.], [16., 4., 1.], [16., 0., 1.]])
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Вы построили ИНС, у которой на выходе один столбец Dense(1), а для обучения передаете ей тензор y_train c тремя столбцами. Отсюда и ошибка expected dense_2 to have shape (1,) but got array with shape (3,).
Если вы ожидаете на выходе три столбца, то и последний / выходной слой ИНС нужно сконфигурировать соответственно:
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(x_train.shape[1],)))#shape 1
model.add(Dense(3)) # <----- NOTE !!!
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.fit(x_train, y_train, epochs=100, batch_size=1, verbose=2)
Пример:
In [371]: x_train.shape
Out[371]: (6, 4)
In [372]: y_train.shape
Out[372]: (6, 3)
In [373]: model = Sequential()
...: model.add(Dense(128, activation='relu', input_shape=(x_train.shape[1],)))#shape 1
...: model.add(Dense(3)) # <----- NOTE !!!
...: model.compile(optimizer='adam', loss='mse', metrics=['mae'])
...: model.fit(x_train, y_train, epochs=10, batch_size=1, verbose=2)
Epoch 1/10
- 0s - loss: 44.4637 - mae: 4.0030
Epoch 2/10
- 0s - loss: 43.2938 - mae: 3.9162
Epoch 3/10
- 0s - loss: 42.2873 - mae: 3.8323
Epoch 4/10
- 0s - loss: 41.3176 - mae: 3.7532
Epoch 5/10
- 0s - loss: 40.2755 - mae: 3.6764
Epoch 6/10
- 0s - loss: 39.4588 - mae: 3.5963
Epoch 7/10
- 0s - loss: 38.4322 - mae: 3.5167
Epoch 8/10
- 0s - loss: 37.5529 - mae: 3.4401
Epoch 9/10
- 0s - loss: 36.6613 - mae: 3.3579
Epoch 10/10
- 0s - loss: 35.7188 - mae: 3.2772
Out[373]: <keras.callbacks.callbacks.History at 0x20714861388>