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_xtrain_y 更改为二维数组,形状为[length_of_array,1]。

【讨论】:

以上是关于Tensorflow 密集标签形状的主要内容,如果未能解决你的问题,请参考以下文章

来自密集张量 Tensorflow 的稀疏张量(矩阵)

来自密集的Tensorflow的稀疏矩阵

TensorFlow 标签号与轴上的形状不匹配

使用自定义维度输入 tensorflow 或 keras 神经网络

TensorFlow ValueError:logits 和标签必须具有相同的形状 ((25, 1) vs (1, 1))

了解 TensorFlow LSTM 输入形状