[入门向]Tensorflow人工智能神经网络搭建入门实操(附思路/代码/逐行注释/结果)

! 内容由北京大学软件与微电子学院曹健老师课程<人工智能实践:Tensorflow笔记>3-6节内容整理而来.我在其中加入了一些注释,对没有接触过神经网络的人来说更容易看懂.这个课程还是不错的,讲解的很详细,有兴趣可以去mooc上看看.

背景:

生产一批零件X含体积x0,重量x1作为特征,假设体积x0+重量x1<1则是一个良品,计算良品率Y

目标:训练计算层w参数,使loss逐渐降低,准确率提高

由背景搭建的模型 2-3-1结构(各层元素间两点一线)

模型


搭建神经网络的八股:准备,前传,反传,迭代

$ 先理一遍思路

0 准备

import
常量定义
生成数据集

1 前向传播:定义输入,参数和输出

x =
y_=

w1=
w2=

a = 
y =

2 反向传播:定义损失函数,反响传播方法

loss=
train_step=

3 生成会话,训练STEPS轮

with tf.Session() as sess:
    init_op=tf.global_variables_initializer()
    sess_run(init_op)

    STEPS=3000
    for i in range(STEPS):
        start=
        end=
        sess.run(train_step, feed_dict:)

#file \tf\tf3_6.py

#coding:utf:8
#0导入模块,生成模拟数据集.
import tensorflow as tf
import numpy as np #科学计算模块
BATCH_SIZE = 8 #一次喂入8个数据 (不宜过大)
seed = 23455 #确保计算结果相同

#基于seed产生随机数
rng = np.random.RandomState(seed)
#随机数返回32行2列的矩阵 表示32组 体积和重量 作为输入数据集
#(由于我们没有数据 这里使用随机生成数据作为使用数据)
X = rng.rand(32,2)
#从X这个32行2列的矩阵中 取出一行 判断如果和小于1 给Y赋值1 如果和不小于1 给Y赋值0
#Y作为输入数据集的标签(正确答案)
Y = [[int(x0 + x1 < 1)] for (x0, x1) in X]
print "X:\n",X
print "Y:\n",Y

#1定义神经网络的输入,参数和输出,定义前向传播过程.
x = tf.placeholder(tf.float32, shape=(None, 2)) #输入的特征32位浮点 特征2个(体积,重量)总数未知None
y_= tf.placeholder(tf.float32, shape=(None, 1)) #输入的特征32位浮点 特征1个(合格/不合格)总数未知None

w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) #生成正态分布随机数 2x3矩阵(计算图第一计算层中6个w) 标准差1 随机种子1
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1)) #生成正态分布随机数 3x1矩阵(计算图第二计算层中3个w) 标准差1 随机种子1

a = tf.matmul(x, w1) #前向传播的计算过程描述 矩阵乘法实现
y = tf.matmul(a, w2) #前向传播的计算过程描述 矩阵乘法实现

#2定义损失函数及反向传播方法.
#均方误差MSE:MSE(y_,y) 各组预测值y与实际答案y_差距的平方求和除n
loss = tf.reduce_mean(tf.square(y-y_))
#三种训练方法分别为 *梯度下降优化器*/*动量优化器*/*亚当优化器*(以下训练方法三选一进行训练即可)
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
#train_step = tf.train.MomentumOptimizer(0.001,0.9).minimize(loss)
#train_step = tf.train.AdamOptimizer(0.001).minimize(loss)

#3生成会话, 训练STEPS轮
#会话(Session):执行计算图中的节点运算(即计算结果)
#变量初始化,计算图解点运算都要使用会话(with结构)实现,即{
#with tf.Session() as sess:
#    sess.run()
#}
with tf.Session()as sess:
#变量初始化:在sess.run函数中使用tf.global_variables_initializer()
init_op = tf.global_variables_initializer()
sess.run(init_op)
#输出目前(未经训练)的参数取值.
print "w1:\n",sess.run(w1)
print "w2:\n",sess.run(w2)
print "\n"

#训练模型
STEPS = 3000 #训练3000轮
for i in range(STEPS):
    start = (i*BATCH_SIZE) % 32
    end = start + BATCH_SIZE
    #每轮从X数据集和Y的标签中,抽取相应的从start到end的特征和标签,喂入神经网络,用sess.run()执行训练过程
    sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
    if i % 500 == 0: #500轮打印一次loss值
        total_loss = sess.run(loss, feed_dict={x:X, y_: Y})
        print("After %d training step(s), loss on all date is %g"%(i, total_loss))

测试结果

”’
X:
[[0.83494319 0.11482951]
[0.66899751 0.46594987]
[0.60181666 0.58838408]
[0.31836656 0.20502072]
[0.87043944 0.02679395]
[0.41539811 0.43938369]
[0.68635684 0.24833404]
[0.97315228 0.68541849]
[0.03081617 0.89479913]
[0.24665715 0.28584862]
[0.31375667 0.47718349]
[0.56689254 0.77079148]
[0.7321604 0.35828963]
[0.15724842 0.94294584]
[0.34933722 0.84634483]
[0.50304053 0.81299619]
[0.23869886 0.9895604 ]
[0.4636501 0.32531094]
[0.36510487 0.97365522]
[0.73350238 0.83833013]
[0.61810158 0.12580353]
[0.59274817 0.18779828]
[0.87150299 0.34679501]
[0.25883219 0.50002932]
[0.75690948 0.83429824]
[0.29316649 0.05646578]
[0.10409134 0.88235166]
[0.06727785 0.57784761]
[0.38492705 0.48384792]
[0.69234428 0.19687348]
[0.42783492 0.73416985]
[0.09696069 0.04883936]]
Y:
[[1], [0], [0], [1], [1], [1], [1], [0], [1], [1], [1], [0], [0], [0], [0], [0], [0], [1], [0], [0], [1], [1], [0], [1], [0], [1], [1], [1], [1], [1], [0], [1]]
w1:
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
w2:
[[-0.8113182 ]
[ 1.4845988 ]
[ 0.06532937]]

After 0 training step(s), loss on all date is 5.13118
After 500 training step(s), loss on all date is 0.429111
After 1000 training step(s), loss on all date is 0.409789
After 1500 training step(s), loss on all date is 0.399923
After 2000 training step(s), loss on all date is 0.394146
After 2500 training step(s), loss on all date is 0.390597
”’


                                Copyright:dolor_059

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值