【发布时间】:2018-08-20 00:24:23
【问题描述】:
我是初学者。当我学习 tensorflow 的程序员指南时,我尝试定义一个用于“估计器”的 dataset_input_fn 函数。我遇到了一个奇怪的错误,它显示:
INFO:tensorflow:使用默认配置。
INFO:tensorflow:使用配置:{'_model_dir': '/model', '_tf_random_seed':无,'_save_summary_steps':100, '_save_checkpoints_steps':无,'_save_checkpoints_secs':600, '_session_config':无,'_keep_checkpoint_max':5, '_keep_checkpoint_every_n_hours':10000,'_log_step_count_steps':100, '_service':无,'_cluster_spec': ,'_task_type':'工人','_task_id':0, '_global_id_in_cluster':0,'_master':'','_evaluation_master':'', '_is_chief':真,'_num_ps_replicas':0,'_num_worker_replicas':1}
INFO:tensorflow:调用model_fn。
INFO:tensorflow:Done 调用 model_fn。
INFO:tensorflow:创建 CheckpointSaverHook。
INFO:tensorflow:Graph 已完成。
2018-03-12 10:22:14.699465: 我 C:\tf_jenkins\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:140] 您的 CPU 支持此 TensorFlow 二进制文件不支持的指令 编译使用:AVX2
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op。
2018-03-12 10:22:15.913858: W C:\tf_jenkins\workspace\rel-win\M\windows\PY\36\tensorflow\core\framework\op_kernel.cc:1202] OP_REQUIRES 在 iterator_ops.cc:870 失败:无效参数:预期 图像(JPEG、PNG 或 GIF),得到空文件 [[Node: DecodeJpeg = DecodeJpegacceptable_fraction=1, channels=0, dct_method="", 花式升级=真,比率=1, try_recover_truncated=false]]
Traceback(最近一次调用最后一次):文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", 第 1361 行,在 _do_call 中 返回 fn(*args) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", 第 1340 行,在 _run_fn target_list, status, run_metadata) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py", 第 516 行,在 退出 c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError:预期 图像(JPEG、PNG 或 GIF),得到空文件 [[Node: DecodeJpeg = DecodeJpegacceptable_fraction=1, channels=0, dct_method="", 花式升级=真,比率=1, try_recover_truncated=false]] [[节点:IteratorGetNext = IteratorGetNextoutput_shapes=[[?,28,28,1], [?]], output_types=[DT_FLOAT, DT_INT32], _device="/job:localhost/replica:0/task:0/device:CPU:0"]] 在处理上述异常的过程中,又出现了一个异常:
Traceback(最近一次调用最后一次):文件“F:\Program 文件\JetBrains\PyCharm 2017.3.3\helpers\pydev\pydev_run_in_console.py",第 53 行,在 run_file pydev_imports.execfile(file, globals, locals) # 执行脚本 File "F:\Program Files\JetBrains\PyCharm 2017.3.3\helpers\pydev_pydev_imps_pydev_execfile.py",第 18 行,在 execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) File "E:/Learning_process/semester2018_spring/deep_learning/meituan/MNIST/demo_cnn_mnist_meituan.py", 第 201 行,在 tf.app.run(main) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\platform\app.py", 第 126 行,运行中 _sys.exit(main(argv)) 文件 "E:/Learning_process/semester2018_spring/deep_learning/meituan/MNIST/demo_cnn_mnist_meituan.py", 第 195 行,主要 步骤=50) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\estimator\estimator.py", 352号线,在火车上 loss = self._train_model(input_fn, hooks, Saving_listeners) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\estimator\estimator.py", 第 891 行,在 _train_model _, loss = mon_sess.run([estimator_spec.train_op, estimator_spec.loss]) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\training\monitored_session.py", 第 546 行,运行中 run_metadata=run_metadata) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\training\monitored_session.py", 第 1022 行,运行中 run_metadata=run_metadata) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\training\monitored_session.py", 第 1113 行,运行中 raise Six.reraise(*original_exc_info) 文件“F:\Anaconda3\lib\site-packages\six.py”,第 693 行,在 reraise 提高价值文件“F:\Anaconda3\lib\site-packages\tensorflow\python\training\monitored_session.py”, 第 1098 行,运行中 return self._sess.run(*args, **kwargs) 文件“F:\Anaconda3\lib\site-packages\tensorflow\python\training\monitored_session.py”, 第 1170 行,运行中 run_metadata=run_metadata) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\training\monitored_session.py", 第 950 行,运行中 return self._sess.run(*args, **kwargs) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", 第 905 行,运行中 run_metadata_ptr) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", 第 1137 行,在 _run feed_dict_tensor, options, run_metadata) 文件 "F:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", 第 1355 行,在 _do_run 选项,run_metadata)文件“F:\Anaconda3\lib\site-packages\tensorflow\python\client\session.py”, 第 1374 行,在 _do_call 中 raise type(e)(node_def, op, message) tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected 图像(JPEG、PNG 或 GIF),得到空文件 [[Node: DecodeJpeg = DecodeJpegacceptable_fraction=1, channels=0, dct_method="", 花式升级=真,比率=1, try_recover_truncated=false]] [[节点:IteratorGetNext = IteratorGetNextoutput_shapes=[[?,28,28,1], [?]], output_types=[DT_FLOAT, DT_INT32], _device="/job:localhost/replica:0/task:0/device:CPU:0"]] PyDev 控制台:使用 IPython 6.1.0
代码如下:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
# Imports
import numpy as np
import os
import tensorflow as tf
import argparse
parser = argparse.ArgumentParser()
# parser.add_argument("--batch_size", default=100, type=int, help='batch_size')
# parser.add_argument("--train_steps", default=1000, type=int, help="train_steps")
parser.add_argument("--model_dir", default='/model', type=str, help='model_dir')
parser.add_argument("--data_dir", default='', type=str, help="data_dir")
def cnn_model(features, labels, mode):
"""
:param features:
:param labels:
:param mode:
:return:
"""
# input
input_layer = tf.reshape(features['image'], [-1, 28, 28, 1])
conv1 = tf.layers.conv2d(inputs=input_layer,
filters = 32,
kernel_size=[5, 5],
padding='same',
activation=tf.nn.relu)
pool1 = tf.layers.max_pooling2d(inputs=conv1,
pool_size=[2, 2],
strides=2)
conv2 = tf.layers.conv2d(inputs=pool1,
filters=64,
kernel_size=[5, 5],
padding='same',
activation=tf.nn.relu)
pool2 = tf.layers.max_pooling2d(inputs=conv2,
pool_size=[2, 2],
strides=2)
pool_flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
dense = tf.layers.dense(inputs=pool_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=10,
activation=None)
predictions = {
'class_ids': tf.argmax(logits, 1),
'probabilities': tf.nn.softmax(logits, name='softmax_tensor')
}
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode,
predictions=predictions)
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
if mode == tf.estimator.ModeKeys.EVAL:
eval_metric_ops = {
'accuracy': tf.metrics.accuracy(labels=labels,
predictions=tf.argmax(logits, 1))
}
return tf.estimator.EstimatorSpec(mode,
loss=loss,
eval_metric_ops=eval_metric_ops)
# train
assert mode == tf.estimator.ModeKeys.TRAIN
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train_op = optimizer.minimize(loss=loss,
global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode,
loss=loss,
train_op=train_op)
def dataset_input_fn(filenames):
"""
:param filenames: tfrecord file's path
:return:
"""
# filenames = ['train.tfrecords', 'test.tfrecords']
dataset = tf.data.TFRecordDataset(filenames)
def _parse(record):
features = {"image": tf.FixedLenFeature((), tf.string, default_value=""),
"label": tf.FixedLenFeature((), tf.int64, default_value=0)}
parsed = tf.parse_single_example(record, features)
image = tf.image.decode_jpeg(parsed["image"])
image = tf.cast(image, tf.float32)
# image = tf.image.convert_image_dtype(image, tf.float32)
image = tf.reshape(image, [28, 28, 1])
# image = tf.cast(image, tf.float32)
# image = tf.decode_raw(features['image'], tf.float64)
label = tf.cast(parsed['label'], tf.int32)
return {'image': image}, label
dataset = dataset.map(_parse)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(100)
dataset = dataset.repeat(1)
iterator = dataset.make_one_shot_iterator()
features, labels = iterator.get_next()
# features = tf.cast(features, tf.float32)
return features, labels
def main(argv):
"""
:param argv:
:return:
"""
args = parser.parse_args(argv[1:])
train_path = ['train.tfrecords']
test_path = ['test.tfrecords']
print("\ndata has been loaded as 'train_x' and 'train_y'\n")
classifier = tf.estimator.Estimator(model_fn=cnn_model,
model_dir=args.model_dir)
classifier.train(
input_fn=lambda: dataset_input_fn(train_path),
steps=50)
print("\ntraining process is done\n")
if __name__ == '__main__':
tf.app.run(main)
【问题讨论】:
标签: python python-3.x tensorflow