Python Can Keras';Sequential fit()函数将列车数据作为数据帧?

Python Can Keras';Sequential fit()函数将列车数据作为数据帧?,python,keras,neural-network,Python,Keras,Neural Network,我想用Keras创建一个神经网络,我的训练数据在一个名为df_train的熊猫数据框中,它具有以下形式。每行是一个事件/观察,由51个变量组成 df_train.head() 我的问题是,我可以使用这个df_列车数据帧作为Keras model.fit()命令的输入吗?如下 net = Sequential() net.add(Dense(70, input_dim = 51, activation = "relu")) net.add(Dense(70, activation = "rel

我想用Keras创建一个神经网络,我的训练数据在一个名为df_train的熊猫数据框中,它具有以下形式。每行是一个事件/观察,由51个变量组成

df_train.head()

我的问题是,我可以使用这个df_列车数据帧作为Keras model.fit()命令的输入吗?如下

net = Sequential()
net.add(Dense(70, input_dim = 51, activation = "relu"))
net.add(Dense(70, activation = "relu"))
net.add(Dense(1, activation = "sigmoid")) 
net.compile(loss = "binary_crossentropy", optimizer = "adam", metrics = ["accuracy"])
net.fit(df_train, train_labels, epochs = 300, batch_size = 100)
在net.fit()中,我将数据帧作为火车数据传递,但在顺序文档中,它没有提到数据帧作为有效输入。但是,在我的代码中,它工作正常,模型运行正常。后台是否发生了错误,并且根本没有错误,或者即使您使用熊猫数据帧作为输入,它仍按预期运行

另外,如果它起作用,在本例中的fit()命令是否每次将给定数据帧的一行作为输入

非常感谢

net.fit(df_train, train_labels, epochs = 300, batch_size = 100)
在此df_中,列为2D,列标签可以是2D或1D(取决于您提到的损耗和输出层的单位)

第二个问题回答:是的,你能做到

如果要将X作为单行输入,即1D,则会生成错误:

 ValueError: Expected 2D array, got 1D array instead:array=[1. 2. 3. 4.].
 Reshape your data either using array.reshape(-1, 1) if your data has a single feature 
 or array.reshape(1, -1) if it contains a single sample.
我们如何解决这个问题

转换成2d

 X=train.iloc[0:1,:]
 print(X.shape)
 output:(1, 25)
 # now this single row converted into  two dim:

有一种专门的方法,叫做
flow\u from\u dataframe
。与从_目录中读取图像并将其提供给神经网络的
flow_类似,前一种方法允许您从数据帧提供数据

您可以在此处查看数据帧中的
flow\u应用程序:

第二个选项是使用
tf.data.Dataset.from_tensor_slices()
,它特定于TensorFlow专用数据管道

此处提供了一个示例:

从性能角度来看,第三种方法可能是未来最优雅、最快速的方法
tf.data.experimental.CsvDataset
。在可预见的未来,我之所以这么说是因为,正如你们所看到的,这是“实验性”方案的一部分;这意味着它是新事物,因此不够成熟和稳定。此处提供了一个关于它的链接:


您可以尝试这两种方法中的任何一种,但在开始时,我将坚持使用来自数据帧的
flow\u

请不要将代码/数据作为图像共享。这可能对您很有用:。后台是否发生了错误,并且没有错误,或者即使您使用熊猫数据帧作为输入,它仍按预期运行?后者。如果您阅读了
Sequential.fit()
的文档,您将看到
x
参数的描述提到了一个Numpy数组(或类似数组的数组),或者一个数组列表(如果模型有多个输入)和一个dict映射输入名称到相应的数组/张量(如果模型有命名输入)。我猜熊猫数据帧的行为类似于这两个数据帧中的一个。我阅读了文档,看到了您所说的确切内容。也许它的行为像一个dict,但因为它没有特别提到熊猫的对象,我不能肯定!谢谢你的回答。让我再详细说明一下。关于我的第一个问题,我想知道的是,您发布的keras'fit(),是否可以将pandas DataFrame对象作为输入,而不是numpy数组对象。关于第二个,我想知道的是:当你运行fit(train_数据,标签)时,神经网络每次运行时都会自动将train_数据的行作为输入?或者我可以将其更改为列。希望你能对我在这里发布的东西有所帮助。谢谢