我是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 )
希望模特能从头开始训练.....
答案 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数组,几乎可以用于几乎所有深度学习库。