Python 为什么model.fit()不';在这种情况下,是否不接受由功能和目标组成的单一输入?

Python 为什么model.fit()不';在这种情况下,是否不接受由功能和目标组成的单一输入?,python,tensorflow,keras,Python,Tensorflow,Keras,我在下面附上了复制该问题的代码。该数据集来自一个名为“表格式游乐场系列2021年3月”的卡格尔竞赛 将numpy导入为np,将pandas导入为pd,os 导入tensorflow作为tf #第一步。加载kaggle竞争数据 os.chdir(“/kaggle/working”) 列车df=pd.read\U csv('../input/TABLAR-PLAYOND-series-mar-2021/train.csv',索引列=0) cats=train\u df.选择类型(include='o

我在下面附上了复制该问题的代码。该数据集来自一个名为“表格式游乐场系列2021年3月”的卡格尔竞赛

将numpy导入为np,将pandas导入为pd,os
导入tensorflow作为tf
#第一步。加载kaggle竞争数据
os.chdir(“/kaggle/working”)
列车df=pd.read\U csv('../input/TABLAR-PLAYOND-series-mar-2021/train.csv',索引列=0)
cats=train\u df.选择类型(include='object').columns.tolist()
#第二步。标签编码
对于猫的c:
序列号[c],mp=序列号[c]。因子分解()
x\u trn=列车方向下降('目标',轴=1)。数值
y_trn=列车df[‘目标’]。数值
#第三步。创建模型
从tensorflow.keras.models导入顺序
从tensorflow.keras.layers导入稠密,输入
模型=顺序()
model.add(输入(shape=(30,))#我们只有30个功能
model.add(密集(16,activation='relu'))
model.add(密集(8,activation='relu'))
model.add(密集型(1,激活='sigmoid'))
model.summary()
compile(loss='binary\u crossentropy',optimizer='adam',metrics=['AUC'])
模型拟合(x=x\u-trn,y=y\u-trn,年代=15)
上面的代码有效。然而,当我用下面的命令替换最后一行时,程序中断了。有人能告诉我怎么修吗

train\u ds=tf.data.Dataset.from\u tensor\u切片((x\u trn,y\u trn))
模型拟合(系列,历次=15)
错误消息抱怨不兼容:

ValueError:layer sequential的输入0与层不兼容:输入形状的轴-1应具有值30,但接收到的输入具有形状[30,1]
模型架构如下所示:

模型:“顺序”
_________________________________________________________________
层(类型)输出形状参数
=================================================================
稠密的(稠密的)(无,16)496
_________________________________________________________________
密集型_1(密集型)(无,8)136
_________________________________________________________________
密集型_2(密集型)(无,1)9
=================================================================
总参数:641
可培训参数:641
不可训练参数:0
_________________________________________________________________
特征x和目标y的尺寸为:

print(x_trn.shape, y_trn.shape)
>>> (300000, 30) (300000,)

在使用
model.fit
中的数据集时,TF希望将训练数据集分批分割。因此,要训练您的模型,请在
model.fit()之前添加以下行:


这将生成正确形式的数据。在以前的方法中,TF会自动分批分割数据。

错误说明
.fit
希望数组的最后一个维度长度为30个元素,但您提供的数组的第一个维度有30个元素,最后一个维度有1个元素(另外,不要发布错误消息并作为图像输出。复制并粘贴文本。文本更易于阅读和搜索)非常感谢你的回答。我的代码终于运行了。我只是想知道你从哪里学到了这样的细微差别。阅读源代码?!没有,只是有一个类似的问题。通过检查张量形状并仔细阅读
模型的API。fit
(实际上是批量大小的一部分),我能够相当快地解决它。因此,只需仔细调试)
   train_ds = train_ds.batch(your_batch_size).