专栏首页Petrichor的专栏tensorflow编程: Inputs and Readers

tensorflow编程: Inputs and Readers

Placeholders

tf.placeholder

插入一个坐等 被feed_dicttensor占位符

tf.placeholder (dtype, shape=None, name=None)

import tensorflow as tf

x = tf.placeholder(dtype=tf.int32)
print x
with tf.Session() as sess:
    print sess.run(x, feed_dict={x:[10, 20]})
Tensor("Placeholder:0", dtype=int32)

[10 20]

tf.placeholder_with_default

tf.placeholder 不同的是,这里如果 未 被feed_dict,并不会 打印报错,而是打印出 默认数据。

tf.placeholder_with_default (input, shape, name=None)

import tensorflow as tf

x = tf.placeholder_with_default(input=[3, 3], shape=(2,))
print x
with tf.Session() as sess:
    print sess.run(x)
    print sess.run(x, feed_dict={x:[10, 20]})
# 占位符 未 被feed_dict,打印默认输出
[3 3]

# 占位符 被feed_dict 了,打印 所被feed_dict 的内容
[10 20]

Readers


Converting


Example protocol buffer


Queues

tf.QueueBase

暂时没搞懂。。。

tf.FIFOQueue

FIFO队列 的 相关操作

tf.FIFOQueue.__init__ (capacity, dtypes, shapes=None, names=None, shared_name=None, name=’fifo_queue’)

队列属性读取:

import tensorflow as tf

q = tf.FIFOQueue(capacity=3, dtypes=tf.float32)

print q.dtypes
print q.name
print q.names
print q.queue_ref
print q.shapes

队列基本操作:

[tf.float32]
fifo_queue
None
Tensor("fifo_queue:0", shape=(), dtype=resource)
[TensorShape(None)]
import tensorflow as tf

# 当后面需要调用dequeue_many接口时,初始定义的tf.FIFOQueue必须要指定shapes参数,否则会报错。
q = tf.FIFOQueue(capacity=3, dtypes=tf.float32, shapes=[(),])
en_m_op = q.enqueue_many(vals=([0, 0, 0],))
de_op = q.dequeue()
y = de_op + 1
en_op = q.enqueue([y])
de_m_op = q.dequeue_many(n=[3])
close_op = q.close()

with tf.Session() as sess:
    # 多个变量入队
    sess.run(en_m_op)
    # 每次一个计算后的单变量入队(sess.run()会自动把en_op拓扑调用的de_op一块执行了)
    sess.run(en_op)
    sess.run(en_op)
    sess.run(en_op)
    sess.run(en_op)
    # 多个变量出队并打印
    print sess.run(de_m_op)
    # 关闭队列
    sess.run(close_op)
[ 1.  1.  2.]

tf.FIFOQueue 出入队列的具体探究:

shapes=[(), ()] ,入队时,由 enqueue_many 中的两个 list 各出表首元素 同时入队。由于 len(每个list) = 3 ,所以每执行一次 sess.run(enqueue_op),就会表演 三次 双表首 同时入队

# coding=utf-8
import tensorflow as tf

# 这里的 “capacity参数项”,即指的是 有多少个 “shapes=[(), ()]”。本程序中 sess.run(enqueue_op) 出现两次,所以 capacity参数项 最低为 6,否则电脑会跑不出结果,终端打印的内容就会一直悬停在那边。
queue = tf.FIFOQueue(capacity=6, dtypes=[tf.float32, tf.float32], shapes=[(), ()])
enqueue_op = queue.enqueue_many([[11, 12, 13], [21, 22, 23]])

for i in xrange(1, 7):
    with tf.Session() as sess:
        # 当 shapes=[(), ()] 时,每一次的 sess.run(enqueue_op) ,入队的内容以及顺序为:[11, 21] -> [12, 22] -> [13, 23] 。即:每次入队的内容由 shapes参数项 决定。
        sess.run(enqueue_op)
        sess.run(enqueue_op)
        print ('\ndequeue_many({}) :'.format(i))
        print sess.run(queue.dequeue_many(i))

可以看到,tf.FIFOQueueshape参数项 的设置 直接决定 了 入队(enqueue)和出队(dequeue)的具体内容。

原因:shape参数项 决定了 队列管道横切面 的状况,影响了 入队 的 shape,自然影响到了 入队 的 内容;跟着也决定了 出队 的 内容。

dequeue_many(1) :
[array([ 11.], dtype=float32), array([ 21.], dtype=float32)]

dequeue_many(2) :
[array([ 11.,  12.], dtype=float32), array([ 21.,  22.], dtype=float32)]

dequeue_many(3) :
[array([ 11.,  12.,  13.], dtype=float32), array([ 21.,  22.,  23.], dtype=float32)]

dequeue_many(4) :
[array([ 11.,  12.,  13.,  11.], dtype=float32), array([ 21.,  22.,  23.,  21.], dtype=float32)]

dequeue_many(5) :
[array([ 11.,  12.,  13.,  11.,  12.], dtype=float32), array([ 21.,  22.,  23.,  21.,  22.], dtype=float32)]

dequeue_many(6) :
[array([ 11.,  12.,  13.,  11.,  12.,  13.], dtype=float32), array([ 21.,  22.,  23.,  21.,  22.,  23.], dtype=float32)]

tf.PaddingFIFOQueue

tf.RandomShuffleQueue

tf.PriorityQueue


Conditional Accumulators


Dealing with the filesystem

tf.matching_files

tf.read_file

读取文件,返回 string型 tensor

tf.read_file(filename, name=None)

import tensorflow as tf

txt_file = './1.txt'

content = tf.read_file(txt_file)
print content
with tf.Session() as sess:
    print sess.run(content)
Tensor("ReadFile:0", shape=(), dtype=string)

Hello Tensorflow !
Hello October !

tf.write_file

string型 tensor 写覆盖 入文件

tf.write_file (filename, contents, name=None)

import tensorflow as tf

txt_file = './1.txt'

with tf.Session() as sess:
    sess.run(tf.write_file(txt_file, contents=tf.convert_to_tensor('Hello Petrichor !\n')))
    print sess.run(tf.read_file(txt_file))
Hello Petrichor !

Input pipeline

tf.train.batch

将 tensor 捆成 batch_tensor

tf.train.batch (tensors, batch_size, num_threads=1, capacity=32, enqueue_many=False, shapes=None, dynamic_pad=False, allow_smaller_final_batch=False, shared_name=None, name=None)

"""
So sorry, 
代码没试通,以后再回过头来琢磨到底哪出错了
"""
import tensorflow as tf


list = [range(11, 14), range(21, 24)]

q = tf.FIFOQueue(capacity=10, dtypes=[tf.float32, tf.float32], shapes=[(), ()])

en_m_op = q.enqueue_many(vals=list)
t_1, t_2 = q.dequeue()
ele_1, ele_2 = tf.train.batch(tensors=[t_1, t_2], batch_size=2)

with tf.Session() as sess:
    sess.run(en_m_op)
    # print sess.run([t_1, t_2])
    print sess.run([ele_1, ele_2])

tf.train.maybe_batch

tf.train.batch_join

tf.train.maybe_batch_join

tf.train.shuffle_batch

tf.train.maybe_shuffle_batch

tf.train.shuffle_batch_join

tf.train.maybe_shuffle_batch_join



本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TensorFlow API 树 (Python)

    Petrichor_
  • 【tensorflow】tensorflow如何避免内存泄漏

    一定要用 sess.graph.finalize(),相当于把整个图冻住,使图变为只读的形式,不再允许增加节点。

    Petrichor_
  • tensorflow: bn层

    可视化 batch normalization 过程中的 tensor演化(以输入一张[1, 4 , 4, 1]的图片为例)

    Petrichor_
  • Tensorflow 实战笔记

    tf.Variable(tf.random_normal([2,3],stddev=2)) 通过满足正态分布的随机数来初始化神经网络中的参数是一个常用方法。

    微风、掠过
  • 如何用tensorflow训练神经网络

    设置神经网络参数的过程就是神经网络的训练过程。只有经过有效训练的神经网络模型才可以真正地解决分类或者回归问题使用监督学习的方式设置神经网络参数需要有一个标注好的...

    于小勇
  • 三天速成!中国香港科技大学TensorFlow课件分享

    该教程第一天先介绍了深度学习和机器学习的潜力与基本概念,而后便开始探讨深度学习框架 TensorFlow。首先我们将学到如何安装 TensorFlow,其实我们...

    华章科技
  • 实战|TensorFlow 实践之手写体数字识别!

    本文的主要目的是教会大家运用google开源的深度学习框架tensorflow来实现手写体数字识别,给出两种模型,一种是利用机器学习中的softmax regr...

    IT派
  • Tensorflow模型保存和读取tf.train.Saver

    然后,在训练循环中,定期调用 saver.save() 方法,向文件夹中写入包含了当前模型中所有可训练变量的 checkpoint 文件。

    周小董
  • 简单的TensorFlow分类教程

    本篇文章有2个topic,简单的分类器和TensorFlow。首先,我们会编写函数生成三种类别的模拟数据。第一组数据是线性可分的,第二种是数据是月牙形数据咬合在...

    用户1332428
  • tensorflow中实现神经网络训练手写数字数据集mnist

    基于tensorflow实现一个简单的三层神经网络,并使用它训练mnist数据集,神经网络三层分别为:

    OpenCV学堂

扫码关注云+社区

领取腾讯云代金券