Python 标签值超出有效范围

Python 标签值超出有效范围,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,因此,我得到以下错误: X = tf.placeholder(shape=(1, 5, 7), name='inputs', dtype=tf.float32) X_flat = tf.layers.flatten(X) y = tf.placeholder(shape=(1), name='outputs', dtype=tf.int32) hidden1 = tf.layers.dense(X_flat, 150, kernel_initializer=he_init) hidden2 =

因此,我得到以下错误:

X = tf.placeholder(shape=(1, 5, 7), name='inputs', dtype=tf.float32)
X_flat = tf.layers.flatten(X)
y = tf.placeholder(shape=(1), name='outputs', dtype=tf.int32)
hidden1 = tf.layers.dense(X_flat, 150, kernel_initializer=he_init)
hidden2 = tf.layers.dense(hidden1, 50, kernel_initializer=he_init)
logits = tf.layers.dense(hidden2, 1, kernel_initializer=he_init)
with tf.name_scope("loss"):
    xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y)
    loss = tf.reduce_mean(xentropy, name="loss")
我的标签包含范围为0到4的整数。我很好奇为什么这不起作用。当我在一个示例代码中使用MNIST时,我不认为y训练集在0到1的范围内,但显然这就是这里发生的事情

如何使交叉熵函数起作用?是否有任何形式的规范化可以使代码正常工作

为什么MNIST可以使用整数,但这个不能用于标签?

Edit 可以肯定的是,这就是我变成的样子

X=tf.placeholder(shape=(1,5,7),name='inputs',dtype=tf.float32)
X_展平=tf.layers.展平(X)
y=tf.placeholder(shape=(1),name='outputs',dtype=tf.int32)
hidden1=tf.layers.dense(X_flat,150,kernel_初始值设定项=he_init)
hidden2=tf.layers.dense(hidden1,50,kernel\u initializer=he\u init)
logits=tf.layers.dense(hidden2,5,kernel\u initializer=he\u init)
具有tf.name_范围(“损失”):
xentropy=tf.nn.sparse\u softmax\u cross\u entropy\u with\u logits(logits=logits,labels=y)
损失=tf.减少平均值(xentropy,name=“损失”)
这对我来说没有问题

起初的 好的。因此,如果您的
y
变量具有范围
(0,4)
,那么您的logit需要具有形状
(批次大小,5)
(在您的情况下,
(1,5)
),因为每个值都是您的模型在特定标签上的置信度

这:

logits=tf.layers.dense(hidden2,1,kernel\u initializer=he\u init)
需要这样做:

logits=tf.layers.dense(hidden2,5,kernel\u initializer=he\u init)
为了做得更好,您可能应该定义这些变量

num_classes=5
# ...
logits=tf.layers.dense(hidden2,num\u类,kernel\u初始值设定项=he\u init)
# ...

我添加了建议的更改,但我现在得到了以下结果:ValueError:Rank mismatch:labels的秩(received 2)应该等于logits的秩减1(received 2)。我认为这与批量大小有关。请检查一下。这个有效,谢谢。如果我要为每个实例输出多个值(一个输出张量),y占位符形状会是什么形状?(我还假设我会将其从稀疏softmax更改为稀疏softmax)。您能澄清一下您的意思吗?你是说批量大小大于1吗?(就像你的
X
具有形状
(n,5,7)
其中
n>1
?)顺便说一句,如果这是一个答案,请勾选小复选框接受答案。不是批量大小,而是选择多个可能的输出。例如,类1和2可以是输出,而不是其中的1个。
tensorflow.python.framework.errors_impl.InvalidArgumentError: Received a label value of 1 which is outside the valid range of [0, 1).  Label values: 1