线上的权重W, 用变量表示,随机给初值。
w=tf.Variable(tf.random_normal([2,3], stddev=2, mean=0, seed=1))
tf.truncated_normal()
#去掉过大偏离点的正态分布
tf.random_uniform()
#平均分布
举例
①w=tf.Variable(tf.random_normal([2,3],stddev=2, mean=0, seed=1)),表示生成正态分布随机数,形状两行三列,标准差是 2,均值是 0,随机种子是 1。
②w=tf.Variable(tf.Truncated_normal([2,3],stddev=2, mean=0, seed=1)),表示去掉偏离过大的正态分布,也就是如果随机出来的数据偏离平均值超过两个标准差,这个数据将重新生成。
③w=random_uniform(shape=7,minval=0,maxval=1,dtype=tf.int32,seed=1),表示从一个均匀分布[minval maxval)中随机采样,注意定义域是左闭右开,即包含minval,不包含maxval。
④ 除了生成随机数,还可以生成常量。tf.zeros([3,2],int32)表示生成[[0,0],[0,0],[0,0]];tf.ones([3,2],int32)表示生成[[1,1],[1,1],[1,1];tf.fill([3,2],6)表示生成[[6,6],[6,6],[6,6]];tf.constant([3,2,1])表示生成[3,2,1]。
tf.zeros
tf.ones
tf.fill #全定值数组
tf.constant #直接给值
√神经网络的实现过程:
1、准备数据集,提取特征,作为输入喂给神经网络(Neural Network,NN)。
2、搭建NN结构,从输入到输出(先搭建计算图,再用会话执行)。
(NN前向传播算法 -> 计算输出)。
3、大量特征数据喂给 NN,迭代优化 NN 参数(NN反向传播算法 -> 优化参数训练模型)。
4、使用训练好的模型预测和分类。
很多实际应用中,我们会先使用现有的成熟网络结构,喂入新的数据,训练相应模型,判断是否能对喂入的从未见过的新数据作出正确响应,再适当更改网络结构,反复迭代,让机器自动训练参数找出最优结构和参数,以固定专用模型。
√前向传播就是搭建模型的计算过程,让模型具有推理能力,可以针对一组输入给出相应的输出。
√变量初始化、计算图节点运算都要用会话(with 结构)实现
with tf.Session() as sess:
sess.run()
√变量初始化:在 sess.run 函数中用 tf.global_variables_initializer()汇
总所有待优化变量。
init_op = tf.global_variables_initializer()
sess.run(init_op)
√计算图节点运算:在 sess.run 函数中写入待运算的节点
sess.run(y)
√用 tf.placeholder 占位,在 sess.run 函数中用 feed_dict 喂数据
喂一组数据:
x = tf.placeholder(tf.float32, shape=(1, 2))
sess.run(y, feed_dict={x: [[0.5,0.6]]})
喂多组数据:
x = tf.placeholder(tf.float32, shape=(None, 2))
sess.run(y, feed_dict={x: [[0.1,0.2],[0.2,0.3],[0.3,0.4],[0.4,0.5]]})
# coding:utf-8
import tensorflow as tf
# 定义输入和参数
x = tf.placeholder(tf.float32, shape=(None,2))
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
# 定义前向传播过程
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 用会话计算结果
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
print("y in tf3_4.py is:\n",sess.run(y, feed_dict={x: [[0.7, 0.5], [0.2, 0.3], \
[0.3, 0.4], [0.4, 0.5]]}))
网友评论