如何从一系列单个值正确构建张量数组数据集-Tensorflow Newbie

时间:2019-01-28 13:01:28

标签: python tensorflow tensorflow-datasets

我是tensorflow和数据集API的新手。看起来我没有向tensorflow输入正确的字典列表。我得到以下输出:

tensorflow.python.framework.errors_impl.InvalidArgumentError: In[0] is not a matrix. Instead it has shape [] [Op:MatMul]

我的代码是:

train_dataset = tf.data.experimental.CsvDataset( 
  "train.csv",
  [tf.float32,
   tf.int32] )

model = tf.keras.Sequential([
   tf.keras.layers.Dense(10, activation=tf.nn.relu, input_shape=(1,)),  #     input shape required
   tf.keras.layers.Dense(10, activation=tf.nn.relu),
   tf.keras.layers.Dense(1)
])

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
model.compile( optimizer,
           loss='categorical_crossentropy',
           metrics=['accuracy'] )

model.fit( train_dataset.make_one_shot_iterator(), 
       steps_per_epoch = 1,
       verbose = 2 )

希望模特能从头开始训练.....

1 个答案:

答案 0 :(得分:0)

我的观察很少:

1)据我了解,问题在于您填写的数据格式。 在注释中,您说CSV文件的形状为(100,2)。 但是,您已经指定了10个节点的输入层。因此,您的神经网络期望接收10个变量作为输入,但是您只提供2个变量(因为您只有2列)。这肯定会返回错误。下一个问题是,要以这么小的输入量实现一个纽神经网络是非常困难的(不是说不可能)。如果您想学习,建议您从另一个数据集开始。互联网上充满了很酷的数据集,这些数据集专门用于学习ML的基础。

2)如果您使用的是keras,则不需要普通的TensorFlow函数(例如tf.train.GradientDescentOptimizer)。您可以仅使用Keras函数(具有不同的语法)训练模型。您可以使用model.compile将很多指令分组。建议您看看Keras Guide to Sequential models

3)我强烈建议您使用pandas库导入数据。您可以执行以下操作:

import pandas as pd
dataframe = pd.read_csv("path/to/dataframe.csv")

然后使用以下命令将其转换为矩阵:

dataframe = dataframe.values

这会将它变成一个numpy数组,几乎可以用于几乎所有深度学习库。