小标
2018-11-08
来源 :
阅读 1365
评论 0
摘要:本文主要向大家介绍了机器学习入门之使用Tensorflow训练神经网络模型,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。
本文主要向大家介绍了机器学习入门之使用Tensorflow训练神经网络模型,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。
下面是第一个完整的训练神经网络模型的代码,里面综合了作者和我在网上查到的其他人关于代码的解读。整理之后如下:
1 #-*-coding:UTF-8-*-
2 import tensorflow as tf
3 #通过numpy工具包生成模拟数据集
4 from numpy.random import RandomState
5
6 #BATCH_SIZE这是定义的一个数量,即一次训练模型,投入的样例数,按理说应该是一次投入所有训练数据的
7 #但是实际操作中一次投入太多数据,会导致电脑死机,因此只好对投入样例数,进行限制
8 batch_size = 8
9
10 #定义神经网络的参数:权重w ,stddev=1代表标准差=1,seed随机数种子,设置后每次产生的数字都相同
11 w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
12 w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
13
14 #我们使用 tf.placeholder() 创建占位符(占位符并没有初始值,它只会分配必要的内存),
15 #在 session.run()过程中再投递数据,可以使用 feed_dict 馈送数据。
16 #在shape的一个维度上使用none,不能确定值的形状时,用None表示
17 x = tf.placeholder(tf.float32, shape=(None, 2), name="x-input")
18 y_= tf.placeholder(tf.float32, shape=(None, 1), name=‘y-input‘)
19
20 #定义前向传播过程
21 a = tf.matmul(x, w1)
22 y = tf.matmul(a, w2)
23 #定义损失函数(交叉熵)
24 #tf.clip_by_value(A, min, max):输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。
25 #小于min的让它等于min,大于max的元素的值等于max。
26 cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
27 #反向传播算法tf.train.AdamOptimizer实现了Adam算法的优化器(随机梯度下降算法的扩展式)
28 train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
29
30 #生成模拟数据
31 #randomState 函数中数字1,相当于一个seed种子,每次产生的随机数都是相同的
32 rdm=RandomState(1)
33 #产生一个128行×2列的随机矩阵
34 X=rdm.rand(128,2)
35 #产生一个布尔型结果矩阵128×1 ,定义规则来给出样本的标签。在这里所有x1+x2<1的样例都被视为正样本
36 #在这里1代表正样本,0代表负样本,大部分的分类问题的神经网络都采用0和1的表示方法
37 Y=[[int(x0+x1)<1] for(x0,x1)in X]
38
39 #创建一个会话来运行Tensorflow程序,反复运行反向传播
40 #tf中运行必须放在session对象中,且运行过后,要关闭session
41 with tf.Session()as sess:
42 #初始化变量,也就是上面的Variable变量
43 init_op=tf.initialize_all_variables()
44 sess.run(init_op)
45 # 输出目前(未经训练)的参数取值
46 #这里为何还要使用sess.run(w1)来进行操作?
47 #因为此时w1还是个变量,是个对象,直接打印出来是对象的地址
48 print "w1:\n",sess.run(w1)
49 print "w2:\n",sess.run(w2)
50 print "\n"
51
52 # 训练模型。
53 #设定训练的轮数
54 STEPS = 5000
55 for i in range(STEPS):
56 #每次选取batch_size个样本进行训练
57 start = (i*batch_size) % 128
58 end = (i*batch_size) % 128 + batch_size
59 #通过选取的样本训练神经网络并更新参数
60 sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
61 #每隔一段时间计算在所有数据上的交叉熵并输出
62 if i % 1000 == 0:
63 total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_: Y})
64 print("After %d training step(s), cross entropy on all data is %g" % (i, total_cross_entropy))
65
66 # 输出训练后的参数取值。
67 print "\n"
68 print "w1:", sess.run(w1)
69 print "w2:", sess.run(w2)
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号