我是 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
我不确定我的错误在哪里
答案 0 :(得分:0)
那是因为你没有在编译器方法中提供损失函数。
所以,像这样改变:
#predictor.compile(optimizer='adam')
predictor.compile(optimizer='adam', loss='some_loss_function')`
您选择的损失函数取决于您的问题是什么类型。如果是回归,可以使用mse
,或者是分类,可以使用categorical_crossentropy
。