Tensorflow学习备忘录

刚刚开始学习 tensorflow 很多东西不是很明白,所以在这里逐条记录,方便记忆和日后的查阅。不过话又说回来,为什么这API的命名如此混乱,一会大写一会小写?
开发环境
系统:Ubuntu 16.04 (WSL)
Python 版本:3.5.2-64bit
Tensorflow 版本: 1.14.0
张量
张量在tensorflow中表示数据的标准方式。简单地说,张量就是多维数组,时二维表到更高维度的扩展。
API 记录
constant
通过 tf.constant() 生成常量张量。
tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)通过定义形状(shape)可以生成同属性(dtype)同值(value)的常量矩阵。其中 verify_shape 规定了 形状是否可以被改变,默认不允许。
constant_0 = tf.constant(0.1, dtype=tf.float32, shape=[2, 2])
# [[0.1 0.1]][[0.1 0.1]]同样可以单独定义
constant_1 = tf.constant([1, 2, 3], tf.int32, name='constant_1')
# [1,2,3]Variable
变量张量,变量主要是在机器学习中用于训练时候进行的输入和输出变化。
Variable(
initial_value=None,
trainable=None,
collections=None,
validate_shape=True,
caching_device=None,
name=None,
variable_def=None,
dtype=None,
expected_shape=None,
import_scope=None,
constraint=None,
use_resource=None,
synchronization=VariableSynchronization.AUTO,
aggregation=VariableAggregation.NONE,
shape=None
)get_variable
get_variable 也是初始化一个变量,通过 initializer 进行初始化。
x = tf.placeholder(tf.int32, name='x')
y = tf.placeholder(tf.int32, name='y')
get_v = tf.get_variable(
'v1', initializer=tf.constant_initializer, shape=(3,3))
add = tf.add(x, y, name='add')
with tf.Session() as s:
s.run(tf.global_variables_initializer())
print(s.run(get_v))
# [[0. 0. 0.][0. 0. 0.][0. 0. 0.]]初始化的操作有如下,详情见操作中表初始化操作。
通过 get_variable 初始化的张量,在进行session 运行的时候,要通过 global_variables_initializer 进行全局变量初始化。
注意 在使用该方法时,如果遇到命名冲突会进行报错。
placeholder
placeholder 主要是声明一个张量( Tensor ),但是没有进行赋值,只给该张量规定了类型( dtype ),形状( shape ),和名称( name )。其中 形状,省略后为一维矩阵,名称可以省略。
num1 = tf.placeholder(tf.float32, [2, 2], name='num1')该条语句生成了一个 2×2 的矩阵,类型全为 float32,名称为 num1 。
当前 num1 没有任何值,要想在后期使用它,在使用时应该给予赋值。
Session
所有的运行都要在 Session 中,所有的操作都要在 Session 中进行。
- 首先要创建会话 Session
sess = tf.Session() - 通过
sess.run()进行计算 session.close()关闭
Session.run()
run(
fetches,
feed_dict=None,
options=None,
run_metadata=None
)对于 run 方法有四个参数。
- fetches 可以看作一个操作,要将执行的操作进行传入。
- feed_dict 可以对placeholder 进行赋值操作。对 placeholder 声明的张量进行赋值。
- options
- run_metadata
操作
Tensorflow 在数据流图上都是基于操作,故记录一些操作。
| 操作类型 | 典型操作 |
|---|---|
| 基础算术 | add/multiply/mod/sqrt/sin/trace/argmin |
| 数组运算 | size/rank/split/reverse/cast/one_hot/quantize |
| 梯度裁剪 | clip_by_value/clip_by_norm/clip_by_global_norm |
| 逻辑控制和调试 | identity/logical_and/equal/less/is_finite/is_nan |
| 数据流控制 | enqueue/dequeue/size/take_grad/apply_grad |
| 初始化操作 | zeros_initializer/random_normal_initializer/orthogonal_initializer |
| 神经网络运算 | convolution/pool/bias_add/softmax/dropout/erosion2d |
| 随机运算 | random_normal/random_shuffle/multinomial/random_gamma |
| 字符串运算 | string_to_hash_bucket/reduce_join/substr/encode_base64 |
| 图像处理运算 | encode_png/resize_images/rot90/hsv_to_rgb/adjust_gamma |
transpose
用于矩阵的交换,如果是二维矩阵表示矩阵转置,三位或者更高维度的矩阵,可以表示互换。
x = tf.placeholder(tf.int32, shape=(2, 3))
with tf.Session() as sess:
print(sess.run(tf.transpose(x), feed_dict={x: [[1, 2, 3], [3, 4, 5]]}))
# [[1 3]
# [2 4]
# [3 5]]conv2d
该API是用于卷积神经网络的卷积操作,tf.nn.conv2d(x,w,strudes,padding) 。有着四个参数
truncated_normal
truncated_normal(shape, dtype, seed=0, seed2=0, name=None)该函数会产生正太分布。
- seed
- seed2
参考
相关内容
如果你觉得这篇文章对你有所帮助,欢迎赞赏~
赞赏