TensorFlow学习笔记一

基本使用

在tensorflow使用中,须知:

  • 使用图(graph)来计算任务
  • 在被称之为会话(session)的上下文(context)中执行图
  • 使用tensor表示数据
  • 使用变量(Variable)维护状态
  • 使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从中获取数据

一 placeholder(占位符)

placeholder是TensorFlow的占位符节点,由placeholder方法创建,其也是一种常量,但是由用户在调用run方法是传递的,也可以将placeholder理解为一种形参。即其不像constant那样直接可以使用,需要用户传递常数值。

X = tf.placeholder(dtype=tf.float32, shape=[144, 10], name='X')

参数说明

dtype:数据类型,必填,默认为value的数据类型,传入参数为tensorflow下的枚举值(float32,float64…)

shape:数据形状,选填,不填则随传入数据的形状自行变动,可以在多次调用中传入不同形状的数据

name:常量名,选填,默认值不重复,根据创建顺序为(Placeholder,Placeholder_1,Placeholder_2…)

  • 我们可以使用run方法的feed_dict参数为占位符提供具体的值
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = x + y
print(sess.run(z, feed_dict={x: 3, y: 4.5}))
print(sess.run(z, feed_dict={x: [1, 3], y: [2, 4]}))

输出:

7.5
[ 3.  7.]
  • 也可以直接feed
x = tf.placeholder(tf.float32, shape=[3])
y = tf.square(x)

with tf.Session() as sess:
  # Feeding a value changes the result that is returned when you evaluate `y`.
  print(sess.run(y, {x: [1.0, 2.0, 3.0]}))  # => "[1.0, 4.0, 9.0]"
  print(sess.run(y, {x: [0.0, 0.0, 5.0]}))  # => "[0.0, 0.0, 25.0]"

二 truncated_normal

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

生成的值服从具有指定平均值和标准偏差的正态分布,如果生成的值大于平均值2个标准偏差的值则丢弃重新选择。
参数说明
shape:1-D向量
mean :均值,默认为0,即正态分布中的μ
stddev :标准差,默认为1,即正态分布中的σ
seed : 种子, 随机数种子,是一个整数,当设置之后,每次生成的随机数;
truncated_normal与random_normal的区别是截断正态分布,会删除大于2个stddev的x值;

三 Session

tf.Session()

Session 是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run() 可以获得你要得知的运算结果, 或者是你所需要运算的部分.

# Build a graph.
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b

# Launch the graph in a session.
sess = tf.Session()

# Evaluate the tensor `c`.
print sess.run(c)

一个Session可能拥有像变量、队列和reader的资源。当它们不在被需要时,释放它们是很重要的。为了释放资源,要么用close(),要么使用作为context管理器的Session。

# Using the `close()` method.
sess = tf.Session()
sess.run(...)
sess.close()

# Using the context manager.
with tf.Session() as sess:
  sess.run(...)

四 Variable

在TensorFlow中,变量(Variable)是特殊的张量(Tensor),它的值可以是一个任何类型和形状的张量。与其他张量不同,变量存在于单个 session.run 调用的上下文之外,也就是说,变量存储的是持久张量,当训练模型时,用变量来存储和更新参数。除此之外,在调用op之前,所有变量都应被显式地初始化过

Variable(
    initial_value=None,
    trainable=True,
    collections=None,
    validate_shape=True,
    caching_device=None,
    name=None,
    variable_def=None,
    dtype=None,
    expected_shape=None,
    import_scope=None,
    constraint=None
)

参数说明:
initial_value:变量的初始值可以是一个张量,或者是可转换为张量的Python对象。初始值必须具有指定的形状,除非validate_shape参数设置为False。也可以是一个无参数调用,调用时返回初始值。在这种情况下,dtype必须指定。(请注意,init_ops.py中的初始化函数在使用之前必须先绑定到一个形状。)
trainable:如果是True(默认值),会将变量添加到图形变量集合GraphKeys.TRAINABLE_VARIABLES中。这个集合被用作Optimizer类使用的默认变量列表。
collections:图形集合键的列表。新变量被添加到这些集合中。默认为[GraphKeys.GLOBAL_VARIABLES]。
validate_shape:如果是False,允许变量初始化为未知形状的值。如果是True,initial_value的形状必须是已知的。
caching_device:可选设备字符串,描述变量应该被缓存以供读取的位置。默认为变量所在的设备。如果不是None,则缓存在另一台设备上。典型用途是在使用该变量的Ops所驻留的设备上进行缓存。
name:变量的可选名称。默认为’Variable’并自动赋值。
variable_def:VariableDef协议缓冲区。如果不是None,则重新创建Variable对象及其内容,而且该内容中引用图中变量的节点必须已经存在。而且图形不能被改变。 variable_def与其他参数是相互排斥的。
dtype:如果设置,initial_value将被转换为给定的类型。如果为None,数据类型将被保留(前提是initial_value是张量),或者由convert_to_tensor决定。
expected_shape:一个Tensor形状。如果设置,initial_val将会是这个形状。
import_scope:可选的string类型。名称作用域会添加到 Variable.仅在从协议缓冲区初始化时使用。

1 创建变量

方式一:最常见的创建变量的方式是使用Variable()构造函数

import tensorflow as tf
v = tf.Variable([1,2,3])   #创建变量v,为一个array
print(v)  #查看v的shape,不是v的值。结果是: <tf.Variable 'Variable:0' shape=(3,) dtype=int32_ref>
with tf.Session() as sess:
    sess.run(v.initializer)     #运行变量的initializer。调用op之前,所有变量都应被显式地初始化过。
    sess.run(v)     #查看v的值,结果是:array([1, 2, 3])

方式二:使用Tensorflow提供了一系列操作符来初始化张量,初始值是常量或是随机量

r = tf.Variable(tf.random_normal([20, 10], stddev=0.35))     #以标准差0.35的正太分布初始化一个形状为[20,40]的张量
z = tf.Variable(tf.zeros([20]))  #初始化一个形状为[20]的张量, 里面的元素值全部为0

类似的函数有tf.eye, tf.ones,tf.constant等
方式三
创建变量还可以调用tf.get_variable 函数.此函数要求指定变量的名字。此名称将被其他副本用来访问同一变量,以及在检验和导出模型时命名此变量的值。tf.get_variable 还允许您重用先前创建的同名变量,从而轻松定义重用层的模型。
要使用 tf.get_variable 创建变量,只需提供名称和形状即可

my_variable = tf.get_variable("my_variable", [1, 2, 3]) #这将创建一个名为“my_variable”的变量,该变量是形状为 [1, 2, 3] 的三维张量。

参考:
https://blog.csdn.net/chinagreenwall/article/details/80697400
https://tensorflow.google.cn/programmers_guide/variables
https://tensorflow.google.cn/api_guides/python/state_ops
https://tensorflow.google.cn/api_docs/python/tf/Variable

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值