我在使用 Keras 构建一个用于预测糖尿病的神经网络。然而,我遇到了一个 ValueError: 当向模型输入符号张量时,我们期望张量具有静态批量大小。
我尝试更改输入形状,但仍然被卡住了。
num_classes = 2from keras.layers import Input, Densefrom keras.models import Model# 这返回一个张量inputs = Input(shape=(784,))# 一个层实例可以对张量进行调用,并返回一个张量x = Dense(64, activation='relu')(inputs)x = Dense(64, activation='relu')(x)predictions = Dense(10, activation='sigmoid')(x)# 这创建了一个包含# 输入层和三个全连接层的模型model = Model(inputs=inputs, outputs=predictions)model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])model.fit(x,y) # 开始训练
运行后出现 ValueError: 当向模型输入符号张量时,我们期望张量具有静态批量大小。
回答:
因为这些行 x
是一个层对象
x = Dense(64, activation='relu')(inputs)x = Dense(64, activation='relu')(x)
模型应该在实际数据上进行拟合,但你却传入了一个层对象:
model.fit(x,y) # 开始训练
简单来说,你的 x
是一个 Layer
对象,它是一个符号张量,Keras 尝试将其视为数据张量但失败了。
要解决这个问题,只需确保你传入的 x
确实是你的训练数据 x
即可。