Это потому, что ваши входные данные двумерные, поэтому сводка модели выглядит следующим образом.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 100, 50) 2550
_________________________________________________________________
dense_2 (Dense) (None, 100, 50) 2550
=================================================================
Total params: 5,100
Trainable params: 5,100
Non-trainable params: 0
_________________________________________________________________
Попробуйте изменить форму тензора после dense_1
или dense_2
, взяв сумму / среднее значение за вторая ось, чтобы получить ту же форму, что и ваш Y
.
Вот мой пример для справки
Я написал настраиваемую функцию суммы для суммирования по вторая ось, чтобы тензор (Нет, 100, 50) был (Нет, 1, 50). Затем добавьте еще один плотный слой.
import keras.backend as K
from keras.layers import Dense, Lambda
from keras.models import Sequential
def mysum(x):
return K.sum(x, axis=1, keepdims=True)
def mysum_output_shape(input_shape):
shape = list(input_shape)
print(shape)
shape[1] = 1
return tuple(shape)
# randomly generate data
import numpy as np
X_train = np.random.normal(0, 1, (50,100,50))
y_train = np.ones((50, 1, 50))
model = Sequential()
model.add(Dense(50, activation='sigmoid', input_shape=(100,50)))
model.add(Lambda(mysum, output_shape=mysum_output_shape))
model.add(Dense(50))
model.compile(optimizer='rmsprop', loss='mse')
model.fit(X_train, y_train, epochs=50)
Важно знать, каков ваш вклад и как тензоры преобразуются через каждый слой. Надеюсь, это поможет!