ValueError: 在“sequential”层的输入0与该层不兼容:期望形状为(无,455,30),但发现形状为(无,30)。

5
这里是一个癌症检测的小项目,已经有了数据集和Colab代码,但在我执行时出现了错误。

这里 是项目链接。

model.fit(x_train, y_train, epochs=1000)

错误如下:

ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 455, 30), found shape=(None, 30)

当我查看评论时,其他人也遇到了这个问题。

你好,欢迎来到StackOverflow!请不要发布外部视频/教程的链接。相反,请在您的问题中包含数据样本(例如df.head().to_dict())和相关代码,以便我们可以复制粘贴以重现您的错误。 - not_speshal
3个回答

5
TensorFlow模型期望输入的第一维是批处理大小,在模型声明中,他们设置输入形状与输入形状相同。为了解决这个问题,你可以将模型的输入形状更改为数据集中的要素数量。
model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid'))

.csv文件中的行数将成为您数据集中样本的数量。由于您没有使用批处理,因此模型将在每个时期同时评估整个数据集。

我的代码似乎可以使用 model = Sequential() model.add(Dense(512, input_shape=(X.shape[1],), activation='relu', input_dim=3)) model.add(Dense(512, activation='relu')) model.add(Dense(1)) model.compile(optimizer='adam', loss='mae', metrics=['mae']) 我只需要插入一个 input_shape=(X.shape[1]) 的实例。这是正确的方式吗?为什么需要在下标 (X_train.shape[1],) 后面加上额外的逗号? - Edison
1
是的,您只需要第一层的输入形状,所有其他形状都是推断出来的。逗号是因为形状被给定为元组。 - Tobiaaa

1

我尝试了上面的解决方案:

model.add(tf.keras.layers.Dense(256,input_shape(x_train.shape[1],), activation='sigmoid'))

但是出现了相同的问题,所以我尝试将模型的input_shape单独定义为下面的代码,并且它可以正常工作,希望这可以帮到你:

model.add(tf.keras.Input(shape=(x_train.shape[1],))) model.add(tf.keras.layers.Dense(128, activation='sigmoid')) model.add(tf.keras.layers.Dense(256, activation='sigmoid')) model.add(tf.keras.layers.Dense(1, activation='sigmoid'))


0

参数 input_shape 形状元组(不包括批次轴)或 TensorShape 实例(不包括批次轴)。 根据 Keras 文档,输入形状确实包括批次轴, 因此请尝试使用 input_shape=(30,) 而不是 input_shape=(455,30)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接