TensorFlow
一、张量、计算图、会话
1.张量:{名字、维度、类型},在TensorFlow中随便定义一个变量,输出后为张量类型。但必须在sess 三中run.
2.计算图:最前面定义变量和各个公式的整个框架,最后使用sess实现。
3.会话:这是比较重要的一个步骤,前面搭建好计算图后在tf.Session 中实现每一个步骤,其中有全局变量初始化函数:tf.global_variables_initializer(),只能使用会话来执行所有定义好的运算和操作,所有还要进行其他操作一般在with结构下会话进行。
二.神经网络实现步骤(具体):
1.对数据预处理,得到输入x与y_,data和label的数据集。
2.(考虑神经网络需要的变量)定义初始化w权重,placeholder输入设置,实现各公式的正向传播过程。
3.设置反向传播优化的各个点:损失函数(均方误差还是交叉熵)
、定义优化算法(梯度下降还是更高级的算法)
注意:优化算法(梯度下降)对损失函数和w的优化
4.创建会话:
注意:一开始在计算图中定义前向传播每一步步骤,然后在对话中迭代运行前向传播,同时通过选取不同的样本再次进行循环,利用算法对w进行优化和loss求最小值。最重要的是在循环梯度下降算法或其他高级优化算法,而梯度下降算法中有w。
(1).初始化全局变量(对w值) 然后run()
(2).设置迭代次数,for循环进行循环
(3).循环具体步骤:整个计算图向下一直计算,但在会话迭代中只run()最后一步步骤(梯度下降算法或其他高级算法),因为最后一步包含所有计算(通过损失函数间接);feed_dict()对placeholder对接,带入的数据是有限制长度的。
(4).每隔一段步数对函数的loss值输出,最终输出优化后的w,得到最终神经网络的表达式,可以通过输入测试集的得到y值来评估拟合效果。
下面是代码:
import tensorflow as tf import os import numpy as np batch_size=8 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' datasize=128 rdm=np.random.RandomState(1) #设置随机数种子 X=rdm.rand(datasize,2) Y=[[int (x1+x2)<1] for (x1,x2) in X] w1=tf.Variable(tf.random_normal([2,3])) w2=tf.Variable(tf.random_normal([3,1])) x=tf.placeholder(tf.float32,shape=(None,2)) y_=tf.placeholder(tf.float32,shape=(None,1)) a=tf.matmul(x,w1) y=tf.matmul(a,w2) y=tf.sigmoid(y) #激活函数 loss=tf.reduce_mean(tf.square(y-y_)) #定义损失函数 train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss) #定义梯度下降 with tf.Session() as sess: first=tf.global_variables_initializer() sess.run(first) sess.run(w1) sess.run(w2) #初始化w print(w1) print(w2) STEPS=5000 for i in range(STEPS): start=(i*batch_size)%datasize end=min(batch_size+start,datasize) #循环梯度下降函数 sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]}) #每隔一段时间计算在所以数据上的交叉熵并输出(loss值) if i % 1000 == 0: total_cross_entropy=sess.run(loss,feed_dict={x:X,y_:Y}) print("After %d training steps,cross entropy on all data is %g"%(i,total_cross_entropy)) print(sess.run(w1)) print(sess.run(w2)) 输出为:
After 0 training steps,cross entropy on all data is 0.216652
[[ 1.3530837 -0.95147735 0.6217464 ]
[-1.0423537 -0.3142203 -0.21951793]]
[[-0.41916692]
[ 1.5389144 ]
[-0.1032058 ]]
After 1000 training steps,cross entropy on all data is 0.21543
[[ 1.3482246 -0.93374366 0.6205722 ]
[-1.0489132 -0.29028258 -0.2211024 ]]
[[-0.4198693 ]
[ 1.5232693 ]
[-0.09945519]]
After 2000 training steps,cross entropy on all data is 0.214538
[[ 1.3439019 -0.9181384 0.6195666 ]
[-1.0545045 -0.27008834 -0.2224042 ]]
[[-0.4200225 ]
[ 1.5100095 ]
[-0.09602766]]
After 3000 training steps,cross entropy on all data is 0.213896
[[ 1.3401349 -0.90463895 0.61871856]
[-1.0592185 -0.25319842 -0.2234654 ]]
[[-0.41984552]
[ 1.4988925 ]
[-0.09297502]]
After 4000 training steps,cross entropy on all data is 0.213428
[[ 1.3367978 -0.892748 0.61798996]
[-1.063194 -0.2390402 -0.22433363]]
[[-0.41924846]
[ 1.4894068 ]
[-0.0901754 ]]