gpt4 book ai didi

machine-learning - 为什么这个 tf.placeholder 必须是 float ?

转载 作者:行者123 更新时间:2023-11-30 08:41:01 24 4
gpt4 key购买 nike

为什么x需要是 float ?既然我传入了一个int类型的列表,为什么它不能是int

代码:

x = tf.placeholder(tf.float32, shape=[None, 1])  # Why must this be a float?
y = tf.placeholder(tf.int32, shape=[None, 2])

with tf.name_scope("network"):
layer1 = tf.layers.dense(x, 100, activation=tf.nn.relu, name="hidden_layer")
output = tf.layers.dense(layer1, 2, name="output_layer")

with tf.name_scope("loss"):
xentropy = tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=output)
loss = tf.reduce_mean(xentropy, name="loss")

with tf.name_scope("train"):
optimizer = tf.train.AdamOptimizer()
training_op = optimizer.minimize(loss)

with tf.name_scope("eval"):
with tf.Session() as sess:
for i in range(1, 50):
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver()
sess.run(training_op, feed_dict={x: np.array(train_data).reshape([-1, 1]), y: label})
if i % 10 == 0:
saver.save(sess, "saved_models/testing")
print "Saved"

当我将其更改为 tf.int32 时,出现以下错误:

TypeError: Value passed to parameter 'features' has DataType int32 not in list of allowed values: float16, float32, float64

如果需要,我可以提供更多代码。

最佳答案

这是由于tf.nn.softmax_cross_entropy_with_logits :

logits and labels must have the same shape [batch_size, num_classes] and the same dtype (either float16, float32, or float64).

我想您可以使用整数输入计算损失。然而,大多数时候,这种损失可以通过梯度下降最小化——就像你所做的那样——这意味着输入需要对实数进行编码才能获得任意更新。

问题是 tf.layers.dense 不会改变您的输入类型。因此,如果输入是整数,它将产生整数输出。 (至少如果激活与整数兼容,例如 relu —— sigmoid 会引发错误)。

您可能想要做的是提供整数输入然后tf.float32中进行所有计算。为此,请先转换您的输入,然后再将其提供给dense:

layer1 = tf.layers.dense(tf.to_float(x), 100, activation=tf.nn.relu, name="hidden_layer")

关于machine-learning - 为什么这个 tf.placeholder 必须是 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44881147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com