Tensorflow搭建神经网路(1)前向网络
(一)神经网络的参数
(1)tf.random_normal() 生成正态分布的随机数
w = tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1)) ### 生成正态分布随机数,两行三列,标准差2,均值0,随机种子1
(2)tf.truncated_normal() 生成去掉过大偏离点的正态分布随机数,也就是如果随机生成的数据偏离平均值超过两个标准差,这个数据将重新生成
w=tf.Variable(tf.Truncated_normal([2,3],stddev=2, mean=0, seed=1))
(3)tf.random_uniform() 生成均匀分布随机数
w=tf.Variable(tf.random_uniform([2,3],minval=0,maxval=1,dtype=tf.float32,seed=1)) # 表示从一个均匀分布[minval maxval)中随机采样,产生的数是均匀分布的,注意定义域是左闭右开,即包含 minval,不包含 maxval。
以上这些函数,如果没有特殊要求标准差、 均值、 随机种子是可以不写的。看具体使用情况。
(4)其它函数:tf.zeros 表示生成全 0 数组
tf.ones 表示生成全 1 数组
tf.fill 表示生成全定值数组
tf.constant 表示生成直接给定值的数组
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]
FNN:
######使用水仙花数据集#####
from sklearn.datasets import load_iris
import tensorflow as tf from numpy.random import RandomState import numpy as np iris = load_iris() iris_data = iris.data iris_lable = iris.target iris_label = np.reshape(iris_lable,(150,1)) # np.reshape(array,(m,n)) 不改变数组的情况下,返回一个维度为(m,n)的数组 #print(np.shape(iris_label)) Batch_size = 2 x = tf.placeholder(tf.float32,shape=(None,4)) # placeholder占位,首先要指定数据类型,然后可以指定形状,因为我们现在只需要占一组数据,且有两个特征值,所以shape为(1,2)
y_ = tf.placeholder(tf.float32,shape=(None,1)) w1 = tf.Variable(tf.random_normal([4,10],stddev=1,seed=1)) w2 = tf.Variable(tf.random_normal([10,1],stddev=1,seed=1)) a = tf.matmul(x,w1) #矩阵乘法 y = tf.matmul(a,w2) #150*1 #print(np.shape(y)) loss = tf.reduce_mean(tf.square(y-y_)) train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss) with tf.Session() as sess: init = tf.global_variables_initializer() sess.run(init) steps = 3000 for i in range(steps): start = (i*Batch_size) % 32 end = start + Batch_size sess.run(train_step,feed_dict={x:iris_data[start:end],y_:iris_label[start:end]}) if i%100 == 0: total_loss = sess.run(loss,feed_dict={x:iris_data,y_:iris_label}) print(total_loss)
思考:像(150,)这样的维度的矩阵不能直接进行运算,应当将其变成二阶张量(150,1)才能进行运算.
搭建网络的基本流程:
(1)导入模块,生成模拟数据集
import
常量定义
生成数据集
(2)前向传播:定义输入、参数和输出
x= y_=
w1= w2=
a= y=
(3)后向传播:定义损失函数、反向传播方法
loss=
train_step=
(4)生成会话,训练STEPS轮
with tf.Session as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
STEPS =
for i in range(STEPS):
start =
end =
sess.run(train_step, feed_dict={ })
(2)tf.truncated_normal() 生成去掉过大偏离点的正态分布随机数,也就是如果随机生成的数据偏离平均值超过两个标准差,这个数据将重新生成
w=tf.Variable(tf.Truncated_normal([2,3],stddev=2, mean=0, seed=1))