TensorFlow函数整理

tf.placeholder()

函数说明:

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

  • dtype:被填充的张量(Tensor)的元素类型。
  • shape:被填充张量(Tensor)的形状(可选参数)。如果没有指定张量(Tensor)打形状,你可以填充该张量(Tensor)为任意形状。
  • name:为该操作提供一个名字(可选参数)。

返回值

一个张量(Tensor)。 必须在使用句柄的情况下赋值,但不可以直接求值。

实例

随机生成1024*1024的矩阵求其平方。

import tensorflow as tf
import numpy as np

x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)

with tf.Session() as sess:
    # print(sess.run(y))  # ERROR: 由于x没有分配具体的数据所以该句将报错,注释掉后运行下面的语句即可

    rand_array = np.random.rand(1024, 1024)
    print(sess.run(y, feed_dict={x: rand_array}))  # feed_dict以字典的方式将生成的rand_array填充进x中

输出:

[[256.57236 251.9136  246.73756 ... 255.34134 258.76617 256.08838]
 [247.4614  248.76004 245.5755  ... 255.68884 253.55783 254.72958]
 [259.5662  261.3415  262.0701  ... 264.10605 254.40105 260.89197]
 ...
 [261.12183 262.28265 258.7582  ... 264.52927 263.2297  261.29486]
 [263.35928 269.88034 259.76392 ... 264.96063 269.3814  273.23434]
 [264.03726 260.48154 255.99431 ... 261.76068 262.7351  265.99802]]

参考链接:https://blog.csdn.net/fxmfxm9304/article/details/80159183

sess.run()

函数说明

run(fetches, feed_dict=None, options=None, run_metadata=None)

  • fetches:可以是单个图元素(single graph element),也可以是任意嵌套的列表list,元组tuple,名称元组namedtuple,字典dict或包含图元素的OrderedDict。
  • feed_dict:可选参数 feed_dict允许调用者替换图中张量的值(the value of tensors in the graph)。
  • options:可选的options参数需要一个RunOptions原型。 选项允许控制该特定步骤的行为(例如,打开跟踪)。
  • run_metadata:可选的run_metadata参数需要一个RunMetadata原型。 适当时,将在那里收集此步骤的非Tensor输出。 例如,当用户在options中打开跟踪时,配置信息将被收集到此参数中并传回。

返回值

当构建完图后,需要在一个session会话中启动图,第一步是创建一个Session对象。
为了取回(Fetch)操作的输出内容, 可以在使用 Session 对象的 run()调用执行图时,传入一些 tensor, 这些 tensor 会帮助你取回结果。
在python语言中,返回的tensor是numpy ndarray对象。

实例

import tensorflow as tf

# 创建一个变量。在默认的图中创建节点,这个节点是一个变量,命名为“counter”
state = tf.Variable(0, name="counter")

# 创建一个常量
one = tf.constant(1)

# 创建一个op。对常量与变量进行简单的加法操作,这点需要说明的是: 在TensoorFlow中,
# 所有的操作op和变量都视为节点,tf.add() 的意思就是在tf的默认图中添加一个op,这个op是用来做加法操作的。
new_value = tf.add(state, one)

# 赋值操作。将new_value的值赋值给update变量
update = tf.assign(state, new_value)

# 此处用于初始化变量。但是这句话仍然不会立即执行。需要通过sess来将数据流动起来 。如果有Variable,一定需要写这句话
init = tf.initialize_all_variables()

# 启动图,运行op
with tf.Session() as sess:
    # 对变量进行初始化,真正的赋值操作
    sess.run(init)
    # 循环3次,并且打印输出。
    for _ in range(3):
        sess.run(update)
        # 打印变量时也需要用sess.run
        print(sess.run(state))

我们在编写代码的时候,总是要先定义好整个图,然后才调用sess.run()。那么调用sess.run()的时候,程序是否执行了整个图

import tensorflow as tf
state = tf.Variable(0.0,dtype=tf.float32)
one = tf.constant(1.0,dtype=tf.float32)
new_val = tf.add(state, one)
update = tf.assign(state, new_val) #返回tensor, 值为new_val
update2 = tf.assign(state, 10000)  #没有fetch,便没有执行
init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    for _ in range(3):
        print sess.run(update)

输出:

1.0
2.0
3.0

我们仅仅是fetch “update”,输出是1.0 , 2.0, 3.0,可以看出,tensorflow并没有计算整个图,只是计算了与想要fetch 的值相关的部分。
参考链接:https://blog.csdn.net/lcczzu/article/details/91449731

feed_dict – sess.run() 中的feed_dict

features_, labels_, indexs_ = sess.run([features, labels, indexs])

feed_dict参数的作用是替换图中的某个tensor的值或设置graph的输入值。

1. 是否需要进行传参feed_dict

需要看features, labels, indexs这3个变量的产生是否存在于“一个需要传参的函数中”,如果产生features, labels, indexs这3个变量的函数的形式像下面这样

def xxx():

    X = tf.placeholder(dtype=tf.float32, shape=([50,93]))
    Y = tf.placeholder(dtype=tf.int32, shape=([50]))
    Z = tf.placeholder(dtype=tf.int32, shape=([50]))      

    ...

    return features, labels, indexs

features, labels, indexs = xxx()

那么这时候features_, labels_, indexs_ = sess.run([features, labels, indexs]),就需要写成下面这样

features_, labels_, indexs_ = sess.run([features, labels, indexs], feed_dict={X:features_, Y:labels_, Z:indexs_})

并且要注意feed_dict不接受tensor格式的数据,所以features_需要是普通格式,比如numpy,但是传参进去后,会自动进行类型的转化,在xxx()函数中,他们就变成tensor格式

2. 是否执行一次sess.run函数,代码里的“数据迭代生成器”就会更新一次batch

那要取决于sess.run函数里面的参数是否与“数据迭代生成器”有关

假如features, labels, indexs = input_fn(),input_fn()函数每执行一次,就生成一个batch的数据,那么这种sess.run([features, labels, indexs])每每执行一次 就会更新一个batch的数据

举个反面的例子,也就是即使执行了2000次sess.run(),也不会更新batch的数据

pred_new_2 = sess.run([pred_new_1], feed_dict={X:features_, Y:labels_, Z:indexs_})。这里pred_new_1的产生函数 就必须要传进来3个参数,所以有feed_dict传参

当前pred_new_1并不是和“数据迭代生成器”有关,而是另外一个函数的返回结果,那么就符合我的举例

3. sess.run()可以将tensor格式转成numpy格式

可以用来很方便的将一些tensor格式的数据,进行数据具体内容查看,也就是将tensor格式转成numpy格式,上面的所有例子都是这种作用

4. feed 只在调用它的方法内有效

我们都知道feed_dict的作用是给使用placeholder创建出来的tensor赋值。其实,他的作用更加广泛:feed 使用一个值临时替换一个 op 的输出结果. 你可以提供 feed 数据作为 run() 调用的参数. feed 只在调用它的方法内有效, 方法结束, feed 就会消失。

import tensorflow as tf
y = tf.Variable(1)
b = tf.identity(y)
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(sess.run(b,feed_dict={y:3})) #使用3 替换掉
    #tf.Variable(1)的输出结果,所以打印出来3 
    #feed_dict{y.name:3} 和上面写法等价
 
    print(sess.run(b))  #由于feed只在调用他的方法范围内有效,所以这个打印的结果是 1

输出:

3
1

参考链接:https://blog.csdn.net/lcczzu/article/details/91449731

tf.reshape()

tf.reshape(tensor, shape, name=None)

函数说明

重塑张量shape

  • tensor:一个Tensor。
  • shape:一个Tensor;必须是以下类型之一:int32,int64;用于定义输出张量的形状。-1表示由实际情况而定
  • name:操作的名称(可选)

返回值

该操作返回一个Tensor.与tensor具有相同的类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值