logits和标签的形状不兼容

时间:2018-01-02 11:20:00

标签: python tensorflow

完整的错误消息如下:

  

ValueError:形状(2,1)和(50,1)不兼容

当我的模型受到训练时会发生。错误要么在我的input_fn:

train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x = {"x" : training_data},
    y = training_labels,
    batch_size = 50,
    num_epochs = None,
    shuffle = True)

在我的logits和loss函数中:

dense = tf.layers.dense(inputs = pool2_flat, units = 1024, activation = tf.nn.relu)
dropout = tf.layers.dropout(inputs = dense, rate = 0.4, training = mode == tf.estimator.ModeKeys.TRAIN)
logits = tf.layers.dense(inputs = dropout, units = 1)

loss = tf.losses.softmax_cross_entropy(labels = labels, logits = logits)

或在我的数据集中。我只能打印出数据集的形状供你查看。

#shape of the dataset
train_data.shape
(1196,2,1)
train_data[0].shape
(2,1)

#this is the data
train_data[0][0].shape
(1,)
train_data[0][0][0].shape
(20,50,50)

#this is the labels
train_data[0][1].shape
(1,)

问题似乎是logits的形状。在这种情况下,它们应该是[batch_size, num_classes] [50,1],但是[2,1]。标签的形状正确[50,1]

如果您想查看整个代码,我已经创建了一个github gist。 https://gist.github.com/hjkhjk1999/38f358a53da84a94bf5a59f44050aad5

1 个答案:

答案 0 :(得分:1)

在您的代码中,您声明模型的输入将以每批50个样本的批量输入,并带有一个变量。但看起来您实际上正在喂食一批带有1个变量(shape=[2, 1])的2个样本,尽管标签形状为[50, 1]

问题是,你提出了50个问题'和两个答案'。

此外,您的数据集形状非常奇怪。我看到你把你的github gist命名为3D Conv。如果您确实尝试进行3D卷积,则可能需要将数据集重新整形为此形状的张量(numpy数组)shape = [samples, width, height, deepth]