TensorFlow—理解实现神经网络的步骤

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值