keras raise 没有为简单模型的任何变量提供梯度

时间:2021-06-29 05:09:03

标签: 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)

我得到了“ValueError:没有为任何变量提供梯度:['dense/kernel:0'、'dense/bias:0'、'dense_1/kernel:0'、'dense_1/bias:0'、' Dense_2/kernel:0', 'dense_2/bias: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 个答案:

答案 0 :(得分:0)

那是因为你没有在编译器方法中提供损失函数。

所以,像这样改变:

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

您选择的损失函数取决于您的问题是什么类型。如果是回归,可以使用mse,或者是分类,可以使用categorical_crossentropy