完整的错误消息如下:
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
答案 0 :(得分:1)
在您的代码中,您声明模型的输入将以每批50个样本的批量输入,并带有一个变量。但看起来您实际上正在喂食一批带有1个变量(shape=[2, 1]
)的2个样本,尽管标签形状为[50, 1]
。
问题是,你提出了50个问题'和两个答案'。
此外,您的数据集形状非常奇怪。我看到你把你的github gist命名为3D Conv。如果您确实尝试进行3D卷积,则可能需要将数据集重新整形为此形状的张量(numpy数组)shape = [samples, width, height, deepth]