使用tf.train.match_filenames_once()时报错FailedPreconditionError: Attempting to use uninitialized value X
2017-11-27 20:25
537 查看
import tensorflow as tf
#使用tf.train.match_filenames_once函数获取文件列表
files=tf.train.match_filenames_once("data.tfrecords-*")
#通过tf.train.string_input_producer函数创建输入队列,输入队列中的文件列表为
#tf.train.mach_filenames_once函数获取的文件列表。这里将shuffle参数设为False
#来避免随机打乱读文件的顺序。但一般在解决问题是,会将shuffle参数设置为True
filename_queue=tf.train.string_input_producer(files,shuffle=False)
reader=tf.TFRecordReader()
_,serialized_example=reader.read(filename_queue)
features=tf.parse_single_example(
serialized_example,
features={
'i':tf.FixedLenFeature([],tf.int64),
'j':tf.FixedLenFeature([],tf.int64),
})
#init=(tf.global_variables_initializer(),tf.local_variables_initializer()) #收集全局变量和局部变量
#init=tf.local_variables_initializer() #收集全局变量
#init=tf.local_variables_initializer() #收集局部变量
with tf.Session() as sess:
#虽然在本段程序中没有声明任何变量,但使用tf.train.match_filenames_once函数时
#需要初始化一些变量
#sess.run(tf.local_variables_initializer())
sess.run(tf.global_variables_initializer())
#sess.run(init)
print(sess.run(files))
#声明tf.train.Coordinator类来协同不同线程,并启动线程
coord=tf.train.Coordinator()
threads=tf.train.start_queue_runners(sess=sess,coord=coord)
#多次执行获取数据的操作
for i in range(6):
print(sess.run([features['i'],features['j']]))
coord.request_stop()
coord.join(threads)
运行以后就会报错FailedPreconditionError: Attempting to use uninitialized value matching_filenames_9
解决方法: 因为此例只有一个局部变量,所以把sess.run(tf.global_variables_initializer())换成sess.run(tf.local_variables_initializer())即可
原代码为《Tensorflow:实战Google深度学习框架》中7.3.2节中的代码
变量未初始化,原因global_variables_initiaiizer()函数仅初始化了全局变量,而local_variables_initializer()则仅初始化局部变量,而train.match_filenames_once()返回的文件列表作为临时变量并没有保存到checkpoint,所以并不会作为全局变量被global_variables_initializer()函数初始化,所以sess.run(files)时,files文件实则并没有被初始化,进而导致报错。
参考https://stackoverflow.com/questions/44143139/tensorflow-operation-tf-train-match-filenames-once-not-working#
跟我的问题完美吻合
本质问题实则是global_variables_initializer()和local_variables_initializer()的区别
参考https://stackoverflow.com/questions/40220201/tensorflow-tf-initialize-all-variables-vs-tf-initialize-local-variables
#使用tf.train.match_filenames_once函数获取文件列表
files=tf.train.match_filenames_once("data.tfrecords-*")
#通过tf.train.string_input_producer函数创建输入队列,输入队列中的文件列表为
#tf.train.mach_filenames_once函数获取的文件列表。这里将shuffle参数设为False
#来避免随机打乱读文件的顺序。但一般在解决问题是,会将shuffle参数设置为True
filename_queue=tf.train.string_input_producer(files,shuffle=False)
reader=tf.TFRecordReader()
_,serialized_example=reader.read(filename_queue)
features=tf.parse_single_example(
serialized_example,
features={
'i':tf.FixedLenFeature([],tf.int64),
'j':tf.FixedLenFeature([],tf.int64),
})
#init=(tf.global_variables_initializer(),tf.local_variables_initializer()) #收集全局变量和局部变量
#init=tf.local_variables_initializer() #收集全局变量
#init=tf.local_variables_initializer() #收集局部变量
with tf.Session() as sess:
#虽然在本段程序中没有声明任何变量,但使用tf.train.match_filenames_once函数时
#需要初始化一些变量
#sess.run(tf.local_variables_initializer())
sess.run(tf.global_variables_initializer())
#sess.run(init)
print(sess.run(files))
#声明tf.train.Coordinator类来协同不同线程,并启动线程
coord=tf.train.Coordinator()
threads=tf.train.start_queue_runners(sess=sess,coord=coord)
#多次执行获取数据的操作
for i in range(6):
print(sess.run([features['i'],features['j']]))
coord.request_stop()
coord.join(threads)
运行以后就会报错FailedPreconditionError: Attempting to use uninitialized value matching_filenames_9
解决方法: 因为此例只有一个局部变量,所以把sess.run(tf.global_variables_initializer())换成sess.run(tf.local_variables_initializer())即可
原代码为《Tensorflow:实战Google深度学习框架》中7.3.2节中的代码
变量未初始化,原因global_variables_initiaiizer()函数仅初始化了全局变量,而local_variables_initializer()则仅初始化局部变量,而train.match_filenames_once()返回的文件列表作为临时变量并没有保存到checkpoint,所以并不会作为全局变量被global_variables_initializer()函数初始化,所以sess.run(files)时,files文件实则并没有被初始化,进而导致报错。
参考https://stackoverflow.com/questions/44143139/tensorflow-operation-tf-train-match-filenames-once-not-working#
跟我的问题完美吻合
本质问题实则是global_variables_initializer()和local_variables_initializer()的区别
参考https://stackoverflow.com/questions/40220201/tensorflow-tf-initialize-all-variables-vs-tf-initialize-local-variables
相关文章推荐
- TensorLow: FailedPreconditionError:Attempting to use uninitialized value Variable
- 【Tensorflow】报错:FailedPreconditionError: Attempting to use uninitialized value keep_prob_7
- tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized val
- 使用 tf.gfile.DeleteRecursively 时,报 FailedPreconditionError 错误
- 【转载】PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- Attempting to use uninitialized value
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- tf.train.match_filenames_once如何验证文件是否正确读取?
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- TensorFlow计算AUC错误:Attempting to use uninitialized value auc/false_positives
- PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- android中使用代码混淆出现Conversion to Dalvik format failed with error 1错误的解决办法
- clang: error: linker command failed with exit code 1 (use -v to see invocation)
- Commit failed with error: did not match any file(s) known to git. 解决办法
- error: linker command failed with exit code 1 (use -v to see invocation)
- error: linker command failed with exit code 1 (use -v to see invocation)报错总结