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))

猜你喜欢

转载自www.cnblogs.com/hanouba/p/11426650.html