每当构建一个神经网络,常用到tf下的几个函数,对其作用做个解析。
即从正态分布中输出随机值。 一般在生成隐藏层中的权重矩阵W和偏移向量b中会使用到。
参数:
- shape: 一维的张量,也是输出的张量。
- mean: 正态分布的均值。
- stddev: 正态分布的标准差。
- dtype: 输出的类型。
- seed: 一个整数,当设置之后,每次生成的随机数都一样。
- name: 操作的名字。
代码
1
2
3
4
5
6
7
|
a
=
tf.Variable(tf.random_normal([
2
,
2
],seed
=
1
)) #生成一个2X2的矩阵
b
=
tf.Variable(tf.truncated_normal([
2
,
2
],seed
=
2
)) #生成一个2X2的矩阵
init
=
tf.global_variables_initializer() #定义全局参数初始化操作
with tf.Session() as sess: #启动tf的会话操作,此步后才开始真正运行
sess.run(init) #运行初始化步骤
print
(sess.run(a)) #运行a参数定义,并打印结果
print
(sess.run(b))
|
输出:
[[-0.81131822 1.48459876]
[ 0.06532937 -2.44270396]]
[[-0.85811085 -0.19662298]
[ 0.13895047 -1.22127688]]
指定seed之后,a的值不变,b的值也不变。
tf.Variable(initializer, name):initializer是初始化参数,可以有tf.random_normal,tf.constant,tf.constant等,name就是变量的名字,用法如下:
- import tensorflow as tf;
- import numpy as np;
- import matplotlib.pyplot as plt;
- a1 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a1')
- a2 = tf.Variable(tf.constant(1), name='a2')
- a3 = tf.Variable(tf.ones(shape=[2,3]), name='a3')
- with tf.Session() as sess:
- sess.run(tf.initialize_all_variables())
- print sess.run(a1)
- print sess.run(a2)
- print sess.run(a3)
[[ 0.76599932 0.99722123 -0.89361787]
[ 0.19991693 -0.16539733 2.16605783]]
1
[[ 1. 1. 1.]
[ 1. 1. 1.]]
x是3维数据,维度为[2,2,3],即(第0维)2个面包片(绿色中括号), 每个绿色面包片中的蓝色矩阵是2行(第1维),3列(第2维)的。所以维度为[2,2,3]
而perm的意思就是将tensor对应的不同的维数之间变换
比如perm = [2,1,0],则原tensor=[2,2,3] 变为tensor = [3, 2,2],即将第0维的维度2放到第2维位置,原第2维的3放到第0维位置,全部倒过来
perm = [0,2,1],则新的tensor = [2,3,2], 后两维置换
tf.transpose(x, perm=[0, 2, 1]) ==>
[ [ [1 4]
[2 5]
[3 6] ]
[ [7 10]
[8 11]
[9 12] ] ]
函数的作用是将tensor变换为参数shape的形式。其中shape为一个列表形式,特殊的一点是列表中可以存在-1。-1代表的含义是不用我们自己指定这一维的大小,函数会自动计算,但列表中只能存在一个-1。 根据shape如何变换矩阵。其实简单的想就是, reshape(t, shape) => reshape(t, [-1]) => reshape(t, shape), 首先将矩阵t变为一维矩阵,然后再对矩阵的形式更改就可以了。
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3]) => [[1. 2. 3.] #常数矩阵a是2行3列
[4. 5. 6.]]
# 2-D tensor `b`
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2]) => [[7. 8.] #常数矩阵b是3行2列
[9. 10.]
[11. 12.]]
c = tf.matmul(a, b) => [[58 64] #矩阵相乘后的c是2行2列
[139 154]]
6.tf.split
7.tf.variable_scope
8.tf.placeholder
9.tf.reduce_mean
10.tf.train.GradientDescentOptimizer().minimize
11.tf.global_variable_initializer
12.tf.nn.softmax_cross_entropy_with_logits()
13.tf.cast()
14.tf.equal()
tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的
- import tensorflow as tf
- import numpy as np
- A = [[1,3,4,5,6]]
- B = [[1,3,4,3,2]]
- with tf.Session() as sess:
- print(sess.run(tf.equal(A, B)))
[[ True True True False False]]
15.tf.argmax()
16.tf.Session()
17.tf.run()