Tensorflow:如何使用cifar10中的tf.train.batch绘制小批量?

时间:2017-04-05 01:11:22

标签: tensorflow

我试图从cifar10二进制文件中绘制迷你批次。 在实现下面显示的代码时(参见[源代码]),机器(python 3.6)不断显示消息(参见[console])和停止。

有没有人能告诉我源代码的问题是什么?

P.S。我是张量流的新手..

[源代码] ------------------------------------------- ------------------ 导入张量流为tf 导入numpy为np 进口口 将matplotlib.pyplot导入为plt

def _get_image_and_label():

# directory where binary files are stored
data_dir = '/tmp/cifar10_data/cifar-10-batches-bin'

# Step1) make filename Queue
filenames = [os.path.join(data_dir, 'data_batch_%d.bin' % i) for i in range(1, 6)]
filename_queue = tf.train.string_input_producer(filenames)

# Step2) read files
label_bytes = 1  # 2 for CIFAR-100
height = 32
width = 32
depth = 3
image_bytes = height * width * depth
record_bytes = label_bytes + image_bytes

reader = tf.FixedLengthRecordReader(record_bytes=record_bytes)
key, value = reader.read(filename_queue)

# Step3) decode the file in a unit of 1 byte
record_bytes = tf.decode_raw(value, tf.uint8)

# The first bytes represent the label, which we convert from uint8->int32.
label = tf.cast(tf.strided_slice(record_bytes, [0], [label_bytes]), tf.int32)

# The remaining bytes after the label represent the image, which we reshape from [depth * height * width] to [depth, height, width].
depth_major = tf.reshape(tf.strided_slice(record_bytes, [label_bytes], [label_bytes + image_bytes]),
                         [depth, height, width])

# Convert from [depth, height, width] to [height, width, depth].
uint8image = tf.transpose(depth_major, [1, 2, 0])

# set shape ( image: tf.float32, label: tf.int32 )
image = tf.cast(uint8image, tf.float32)
image.set_shape([height, width, 3])
label.set_shape([1])

# collect batch from the files
# train_x_batch, train_y_batch = tf.train.batch([image, label], batch_size=1)
# return train_x_batch, train_y_batch

return image, label

使用tf.Session()作为sess:     sess.run(tf.global_variables_initializer())

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

image, label = _get_image_and_label()

for i in range(10):
    image_batch, lable_batch = tf.train.batch([image, label], batch_size=1)
    image_batch_uint8 = tf.cast(image_batch, tf.uint8)
    final_image = sess.run(image_batch_uint8)
    imgplot = plt.imshow(final_image[0])

coord.request_stop()
coord.join(threads)

sess.close()

[控制台] -------------------------------------------- --------------------- / home / dooseop / anaconda3 / bin / python /home/dooseop/pycharm-community-2016.3.3/helpers/pydev/pydevd。 py --multiproc --qt-support --client 127.0.0.1 --port 40623 --file /home/dooseop/PycharmProjects/Tensorflow/CIFAR10_main.py 警告:找不到使用cython的调试器加速。运行'" / home / dooseop / anaconda3 / bin / python" " /home/dooseop/pycharm-community-2016.3.3/helpers/pydev/setup_cython.py" build_ext --inplace'建立。 连接到pydev调试器(build 163.15188.4) pydev调试器:进程10992正在连接

我的tensorflow / stream_executor / dso_loader.cc:135]在本地成功打开了CUDA库libcublas.so.8.0 我的tensorflow / stream_executor / dso_loader.cc:135]在本地成功打开了CUDA库libcudnn.so.5 我的tensorflow / stream_executor / dso_loader.cc:135]在本地成功打开了CUDA库libcufft.so.8.0 我的tensorflow / stream_executor / dso_loader.cc:135]在本地成功打开了CUDA库libcuda.so.1 我的tensorflow / stream_executor / dso_loader.cc:135]在本地成功打开了CUDA库libcurand.so.8.0 W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE3指令,但这些指令可在您的计算机上使用,并可加速CPU计算。 W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE4.1指令,但这些指令可在您的计算机上使用,并可加速CPU计算。 W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE4.2指令,但这些指令可在您的计算机上使用,并可加速CPU计算。 W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用AVX指令,但这些指令可在您的计算机上使用,并可加速CPU计算。 W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用AVX2指令,但这些指令可在您的计算机上使用,并可加快CPU计算速度。 W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用FMA指令,但这些指令可在您的计算机上使用,并可加速CPU计算。 I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc:910]从SysFS读取的成功NUMA节点具有负值(-1),但必须至少有一个NUMA节点,因此返回NUMA节点零 I tensorflow / core / common_runtime / gpu / gpu_device.cc:885]找到具有属性的设备0: 名称:GeForce GTX 1070 major:6 minor:1 memoryClockRate(GHz)1.683 pciBusID 0000:01:00.0 总内存:7.92GiB 可用内存:7.17GiB 我tensorflow / core / common_runtime / gpu / gpu_device.cc:906] DMA:0 我tensorflow / core / common_runtime / gpu / gpu_device.cc:916] 0:Y I tensorflow / core / common_runtime / gpu / gpu_device.cc:975]创建TensorFlow设备(/ gpu:0) - > (设备:0,名称:GeForce GTX 1070,pci总线ID:0000:01:00.0)

使用退出代码137完成处理(由信号9中断:SIGKILL)

1 个答案:

答案 0 :(得分:0)

只有当有人明确杀死该程序时才会发生Sigkill。这里的问题是在创建队列运行程序之前调用start_queue_runners(因为它们是由tf.train.batch创建的)。同样为了获得更好的性能,只需构建一次图形并在循环中运行它,如:

image, label = _get_image_and_label()
image_batch, lable_batch = tf.train.batch([image, label], batch_size=1)
image_batch_uint8 = tf.cast(image_batch, tf.uint8)

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
for i in range(10):
    final_image = sess.run(image_batch_uint8)
    imgplot = plt.imshow(final_image[0])

coord.request_stop()
coord.join(threads)