神经网络参数与TensorFlow变量

在TensorFlow中变量的作用是保存和更新神经网络中的参数,需要给变量指定初始值,如下声明一个2x3矩阵变量

weights =tf.Variable(tf.random_normal([2,3], stddev=1))

在这段代码中tf.random_normal([2,3], stddev=1)会产生一个2x3的矩阵,矩阵中的元素是均值为0,标准差为2的随机数。tf.random_normal()可以通过参数mean来指定平均值,不指定默认0.

函数名称 随机数分布 主要参数
tf.random_normal 正态分布 平均值、标准差、取值类型
tf.truncated_normal

正态分布、但随机出来的值偏离平均值超

过2个标准差,那么这个数将会重新随机

平均值、标准差、取值类型
tf.random_uniform 均匀分布 最小值、最大值、取值类型
tf.random_gamma Gamma分布 形状参数alpha、尺度参数beta、取值类型

 TensorFlow支持常量来初始化变量,下表将给出常用的常量声明方法

函数名称 功能 样例
tf.zeros 产生全为0的数组 tf.zeros([2,3], int32) -> [[0,0,0], [0,0,0]]
tf.ones 产生全为1的数组 tf.oness([2,3], int32) -> [[1,1,1], [1,1,1]]
tf.fill 产生一个全部为给定数字的数组 tf.fill([2,3], 9) -> [[9,9,9], [9,9,9]]
tf.constant 产生一个给定值的常量 tf.constant([1,2,3]) -> [1,2,3]


在神经网络中,偏置项通常会使用常数来设置初始值,下面代码将会生成一个初始值 全部为0且长度为3的变量

biases = tf.Variable(tf.zeros([3]))

TensorFlow也支持通过其他变量的初始值来初始化新的变量

W1 = tf.Variable(tf.random_normal([3, 3], stddev=2))
W2 = tf.Variable(W1.initialized_value())    # W2的初始值设置与W1初始值相同
W3 = tf.Variable(W1.initialized_value() * 2.0)  # W3的初始值设置是W1初始值2倍

 在TensorFlow中一个变量在使用前必须对其进行初始化,下面程序变量实现神经网络参数并实现前向传播的过程

import tensorflow as tf


# 声明w1, w2两个变量。通过seed参数设定随机种子
# 这样可以保证每次运行得到的结果是一样的
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))

# 暂时将输入的特征向量定义一个常量,x是一个1x2的矩阵
x = tf.constant([[1.0, 2.9]])

# 通过前项传播算法得到神经网络的输出
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 定义会话
sess = tf.Session()
# 初始化变量, 初始化所有的变量可以使用tf.global_variables_initializer()函数
sess.run(w1.initializer)
sess.run(w2.initializer)
print(sess.run(y))
sess.close()

"""
输出
[[9.153097]]

"""

猜你喜欢

转载自www.cnblogs.com/lyh-vip/p/10510273.html
今日推荐