Tensorflow 密集标签形状
Posted
技术标签:
【中文标题】Tensorflow 密集标签形状【英文标题】:Tensorflow Dense label shape 【发布时间】:2019-04-20 10:12:51 【问题描述】:我是使用 Tensorflow 和 Python 的新手,我已经看过网站上的所有教程,现在我正在使用我的第一个真实数据集。
我想用 NN 做的是在了解每日趋势的情况下预测一些发电厂的能源消耗。我有一个包含所有这些(实际)值的 .xlsx 文件。使用 Pandas,我对训练集和验证集中的数据进行了拆分和规范化(即 train_x 和 train_y,其中 train_x 是时间,train_y 是标签)。 x 和 y 数组都是 numpy.ndarray 并且格式如下(只是头部):
print(train_x)
[ 644]
[ 645]
[ 646]
print(train_y)
[-0.09154356 1.10702972 1.13661838]
[ 0.05104414 1.39112378 1.5319337 ]
[-0.05719421 1.40702419 1.48187637]
然后我创建了模型:
model = keras.Sequential([
keras.layers.Dense(64, activation=tf.nn.relu, input_shape= (train_x.shape([0]))),
keras.layers.Dense(3, activation=tf.nn.softmax)])
model.compile(loss='categorical_cross_entropy',
optimizer='Adam',
metrics=['accuracy'])
history = model.fit(train_x, train_y, epochs=5, verbose=1)
但是当我运行脚本时,我得到了这个错误:
TypeError: 'tuple' object is not callable
我猜这个问题是关于层的输入形状或者可能是建议here的损失函数,所以我尝试修改损失函数:
LOSS = tf.nn.categorical_cross_entropy_with_logits(logits=3, labels=3)
当然还有model.compile:
model.compile(loss=LOSS,
optimizer='Adam',
metrics=['accuracy'])
但我又遇到了同样的错误:
TypeError: 'tuple' object is not callable
我哪里出错了?
【问题讨论】:
【参考方案1】:应该是array.shape[0]
,而不是array.shape([0])
。 shape
是 numpy 数组的属性,而不是方法。正确的语法应该是:
keras.layers.Dense(64, activation=tf.nn.relu, input_shape= (train_x.shape[-1],)),
另外,将train_x
和train_y
更改为二维数组,形状为[length_of_array,1]。
【讨论】:
以上是关于Tensorflow 密集标签形状的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义维度输入 tensorflow 或 keras 神经网络
TensorFlow ValueError:logits 和标签必须具有相同的形状 ((25, 1) vs (1, 1))