tensorflow MNIST fully_connected_feed.py 失败:range() 至少需要 2 个参数(给定 1 个)
tensorflow MNIST fully_connected_feed.py fails: range() takes at least 2 arguments (1 given)
我在运行tensor flow tutorials 之一中遇到了问题。教程说 运行 我只需要输入 python fully_connected_feed.py
。当我这样做时,它通过获取输入数据,但随后失败,如下所示:
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Traceback (most recent call last):
File "fully_connected_feed.py", line 225, in <module>
tf.app.run()
File "/Users/me/anaconda/lib/python2.7/site-packages/tensorflow/python/platform/default/_app.py", line 11, in run
sys.exit(main(sys.argv))
File "fully_connected_feed.py", line 221, in main
run_training()
File "fully_connected_feed.py", line 141, in run_training
loss = mnist.loss(logits, labels_placeholder)
File "/Users/me/tftmp/mnist.py", line 96, in loss
indices = tf.expand_dims(tf.range(batch_size), 1)
TypeError: range() takes at least 2 arguments (1 given)
我认为这个错误是因为会话设置and/or张量评估存在一些问题。这是 mnist.py 中导致问题的函数:
def loss(logits, labels):
"""Calculates the loss from the logits and the labels.
Args:
logits: Logits tensor, float - [batch_size, NUM_CLASSES].
labels: Labels tensor, int32 - [batch_size].
Returns:
loss: Loss tensor of type float.
"""
# Convert from sparse integer labels in the range [0, NUM_CLASSSES)
# to 1-hot dense float vectors (that is we will have batch_size vectors,
# each with NUM_CLASSES values, all of which are 0.0 except there will
# be a 1.0 in the entry corresponding to the label).
batch_size = tf.size(labels)
labels = tf.expand_dims(labels, 1)
indices = tf.expand_dims(tf.range(batch_size), 1)
concated = tf.concat(1, [indices, labels])
onehot_labels = tf.sparse_to_dense(
concated, tf.pack([batch_size, NUM_CLASSES]), 1.0, 0.0)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits, onehot_labels,
name='xentropy')
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
return loss
如果我将 loss
函数中的所有代码放在 with tf.Session():
块中,它就可以避免此错误。但是,稍后我收到有关未初始化变量的其他错误,所以我猜测会话设置或初始化或其他方面出现了重大问题。作为张量流的新手,我有点不知所措。有任何想法吗?
[注意:我根本没有编辑代码,只是从 tensorflow 教程下载并尝试 运行 按照说明 python fully_connected_feed.py
]
TypeError: range() takes at least 2 arguments (1 given)
那是错误。
查看 tensorflow docs for range,我们可以看到 range
的函数签名为 start, limit, delta=1, name='range'
。这意味着函数调用至少需要两个参数。您的示例仅显示提供的一个参数。
可以在文档中找到示例:
# 'start' is 3
# 'limit' is 18
# 'delta' is 3
tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15]
这个问题的出现是因为在 GitHub 上的最新版本的 TensorFlow 源代码中,tf.range()
已经 updated 对其参数更加宽松(以前它需要两个参数;现在它具有与 Python 的 range()
内置函数相同的语义),并且 fully_connected_feed.py
示例已更新以利用它。
但是,如果您尝试 运行 此版本针对 TensorFlow 的二进制分发版,您将收到此错误,因为对 tf.range()
的更改尚未合并到二进制包中。
最简单的解决方案是下载 the old version of mnist.py
. Alternatively, you could build from source 以使用最新版本的教程。
你可以像这样正确修复 mnist 代码:
indices = tf.expand_dims(tf.range(0,batch_size),1)
我在运行tensor flow tutorials 之一中遇到了问题。教程说 运行 我只需要输入 python fully_connected_feed.py
。当我这样做时,它通过获取输入数据,但随后失败,如下所示:
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Traceback (most recent call last):
File "fully_connected_feed.py", line 225, in <module>
tf.app.run()
File "/Users/me/anaconda/lib/python2.7/site-packages/tensorflow/python/platform/default/_app.py", line 11, in run
sys.exit(main(sys.argv))
File "fully_connected_feed.py", line 221, in main
run_training()
File "fully_connected_feed.py", line 141, in run_training
loss = mnist.loss(logits, labels_placeholder)
File "/Users/me/tftmp/mnist.py", line 96, in loss
indices = tf.expand_dims(tf.range(batch_size), 1)
TypeError: range() takes at least 2 arguments (1 given)
我认为这个错误是因为会话设置and/or张量评估存在一些问题。这是 mnist.py 中导致问题的函数:
def loss(logits, labels):
"""Calculates the loss from the logits and the labels.
Args:
logits: Logits tensor, float - [batch_size, NUM_CLASSES].
labels: Labels tensor, int32 - [batch_size].
Returns:
loss: Loss tensor of type float.
"""
# Convert from sparse integer labels in the range [0, NUM_CLASSSES)
# to 1-hot dense float vectors (that is we will have batch_size vectors,
# each with NUM_CLASSES values, all of which are 0.0 except there will
# be a 1.0 in the entry corresponding to the label).
batch_size = tf.size(labels)
labels = tf.expand_dims(labels, 1)
indices = tf.expand_dims(tf.range(batch_size), 1)
concated = tf.concat(1, [indices, labels])
onehot_labels = tf.sparse_to_dense(
concated, tf.pack([batch_size, NUM_CLASSES]), 1.0, 0.0)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits, onehot_labels,
name='xentropy')
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
return loss
如果我将 loss
函数中的所有代码放在 with tf.Session():
块中,它就可以避免此错误。但是,稍后我收到有关未初始化变量的其他错误,所以我猜测会话设置或初始化或其他方面出现了重大问题。作为张量流的新手,我有点不知所措。有任何想法吗?
[注意:我根本没有编辑代码,只是从 tensorflow 教程下载并尝试 运行 按照说明 python fully_connected_feed.py
]
TypeError: range() takes at least 2 arguments (1 given)
那是错误。
查看 tensorflow docs for range,我们可以看到 range
的函数签名为 start, limit, delta=1, name='range'
。这意味着函数调用至少需要两个参数。您的示例仅显示提供的一个参数。
可以在文档中找到示例:
# 'start' is 3
# 'limit' is 18
# 'delta' is 3
tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15]
这个问题的出现是因为在 GitHub 上的最新版本的 TensorFlow 源代码中,tf.range()
已经 updated 对其参数更加宽松(以前它需要两个参数;现在它具有与 Python 的 range()
内置函数相同的语义),并且 fully_connected_feed.py
示例已更新以利用它。
但是,如果您尝试 运行 此版本针对 TensorFlow 的二进制分发版,您将收到此错误,因为对 tf.range()
的更改尚未合并到二进制包中。
最简单的解决方案是下载 the old version of mnist.py
. Alternatively, you could build from source 以使用最新版本的教程。
你可以像这样正确修复 mnist 代码:
indices = tf.expand_dims(tf.range(0,batch_size),1)