keras не создает градиентов для какой-либо переменной для простой модели

#python #keras

Вопрос:

Я новичок в keras, и я просто создаю модель для аппроксимации отображения вектора 45 измерений в вектор 20 измерений.

Мои коды таковы

 x = Input(shape=(45))
y = Dense(90)(x)
y = Dense(40)(y)
z = Dense(20)(y)

predictor = Model(x,z)
predictor.compile(optimizer='adam')
predictor.summary()

def train():
    X = []
    Y = []

    f = open('./x.txt', 'r')
    line = f.readline()
    while line:
        X.append(eval(line))
        line = f.readline()
    f.close()
    f = open('./y.txt', 'r')
    line = f.readline()
    while line:
        Y.append(eval(line))
        line = f.readline()
    f.close()
    X=np.array(X).reshape(-1,45)
    Y=np.array(Y).reshape(-1,20)
    predictor.fit(X, Y, batch_size=32, epochs=5)
 

И я получил «Ошибку значения: для любой переменной не предусмотрено градиентов: [«плотный/ядро:0», «плотный/смещение:0», «плотность 1/ядро:0», «плотность 1/смещение:0», «плотность 2/ядро:0», «плотность 2/смещение:0″].»

Результатом summary() является

 Model: "functional_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 45)]              0         
_________________________________________________________________
dense (Dense)                (None, 90)                4140      
_________________________________________________________________
dense_1 (Dense)              (None, 40)                3640      
_________________________________________________________________
dense_2 (Dense)              (None, 20)                820       
=================================================================
Total params: 8,600
Trainable params: 8,600
 

Я не уверен в том, в чем моя ошибка

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

1. Добавьте функцию потерь здесь: predictor.compile(optimizer='adam') => predictor.compile(optimizer='adam', loss='some_loss_function')

Ответ №1:

Это потому, что вы не предоставили функцию потерь в методе компилятора.

Итак, изменись вот так:

 #predictor.compile(optimizer='adam')
predictor.compile(optimizer='adam', loss='some_loss_function')`
 

Функция потерь, которую вы выбираете, зависит от типа вашей проблемы. Если это регрессия, вы можете использовать mse , или это классификация, которую вы можете использовать categorical_crossentropy .