TensorFlow实现反向传播

本节先举个简单的回归算法的例子。这里先举一个简单的例子,从均值1,标准差为0.1的正态分布中随机抽样100个数,然后乘以变量A,损失函数L2正则函数,也就是实现函数X*A=target,X为100个随机数,target为10,那么A的最优结果也为10。

第二个例子是一个简单的二值分类算法。从两个正态分布(N(-1,1)和N(3,1))生成100个数。
所有从正态分布N(-1,1)生成的数据标为目标类0;从正态分布N(3,1)生成的数据标为目标类1,模型
算法通过sigmoid函数将这些生成的数据转换成目标类数据。换句话讲,模型算法是sigmoid(x+A),其中,
A是要拟合的变量,理论上A=-1。假设,两个正态分布的均值分别是m1和m2,则达到A的取值时,它们通
过-(m1+m2)/2转换成到0等距的值。后面将会在TensorFlow中见证怎样取到相应的值。

同时,指定一个合适的学习率对机器学习算法的收敛是有帮助的。优化器类型也需要指定,前面的两个
例子会使用标准梯度下降法,它在TensorFlow中的实现是GradientDescentOptimizer()函数。

这里是回归算法例子:

1.导入Python的数值计算模块,numpy和tensorflow:

In [15]:
import numpy as np
import tensorflow as tf
 

2.创建计算图会话:

In [16]:
sess = tf.Session()
 

3.生成数据,创建占位符和变量A:

In [17]:
x_vals = np.random.normal(1, 0.1, 100)
x_vals
Out[17]:
array([0.85473643, 0.96126079, 0.99987964, 0.94898843, 1.04117097,
0.97721906, 1.17807261, 0.83860367, 1.28056141, 1.02976099,
0.90844363, 1.05311543, 1.10732355, 0.94467634, 0.97918689,
0.94916167, 0.87431717, 1.04365034, 0.9653559 , 0.9738876 ,
0.94834554, 1.04800372, 0.97612144, 0.97875486, 1.08076762,
0.89620432, 0.82966182, 1.01347914, 1.00655594, 1.00972554,
1.0956883 , 1.01281699, 0.88992947, 1.04429882, 1.01027622,
0.91045714, 1.10571857, 1.0064056 , 1.09069858, 0.91892655,
0.99566244, 0.96414187, 1.10456956, 1.03746805, 1.05676228,
1.05400922, 0.91619416, 1.00368318, 1.01889345, 1.01920683,
0.9712843 , 0.99061975, 0.98477408, 1.02996796, 0.95895593,
0.94575059, 0.89801272, 1.06555307, 0.85761454, 1.13257007,
1.13296022, 0.96402961, 1.10022208, 0.99971843, 0.98802702,
0.94654868, 1.08425381, 0.84186499, 0.95389053, 1.01410783,
0.91944571, 1.1104405 , 1.04115229, 1.02436364, 1.03605459,
1.06967948, 1.1200382 , 1.08068316, 0.89911599, 1.0328783 ,
1.19179204, 1.10538897, 1.07498215, 1.13399276, 1.08425489,
1.25083017, 1.05845486, 1.07359734, 1.18477225, 0.74738841,
1.14564339, 1.071004 , 0.80177086, 0.88481168, 1.13268239,
1.0493438 , 1.06613515, 0.89849749, 0.99410046, 0.99045711])
In [18]:
y_vals = np.repeat(10., 100)
y_vals
Out[18]:
array([10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
10., 10., 10., 10., 10., 10., 10., 10., 10.])
In [19]:
x_data = tf.placeholder(shape=[1], dtype=tf.float32)
y_target = tf.placeholder(shape=[1], dtype=tf.float32)
A = tf.Variable(tf.random_normal(shape=[1]))
A
Out[19]:
<tf.Variable 'Variable_2:0' shape=(1,) dtype=float32_ref>
 

4.增加乘法操作:

In [20]:
my_output = tf.multiply(x_data, A)
 

5.增加L2正则损失函数:

In [21]:
loss = tf.square(my_output - y_target)
 

6.在运行之前,需要初始化变量:

In [22]:
init = tf.global_variables_initializer()
sess.run(init)
 

7.现在声明变量的优化器,使用的是标准梯度下降算法,学习率为0.02

In [23]:
my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.02)
train_step = my_opt.minimize(loss)
 

8.最后一步是训练算法。选择一个随机的x和y,传入计算图中。TensorFlow将自动地计算损失,调整A偏差来最小化损失:

In [25]:
for i in range(100):
rand_index = np.random.choice(100)
rand_x = [x_vals[rand_index]]
rand_y = [y_vals[rand_index]]
sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})
if (i + 1) % 25 == 0:
print('Step #' + str(i + 1) + ' A = ' + str(sess.run(A)))
print('Loss = ' + str(sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})))
 
Step #25 A = [10.019832]
Loss = [0.2743014]
Step #50 A = [9.841655]
Loss = [0.00076162]
Step #75 A = [9.859462]
Loss = [0.15839773]
Step #100 A = [9.82074]
Loss = [0.08536417]
 
 
 
 



TensorFlow机器学习实战指南之第二章2的更多相关文章

  1. TensorFlow机器学习实战指南之第二章

    一.计算图中的操作 在这个例子中,我们将结合前面所学的知识,传入一个列表到计算图中的操作,并打印返回值: 声明张量和占位符.这里,创建一个numpy数组,传入计算图操作: import tensorf ...

  2. TensorFlow机器学习实战指南之第一章

    TensorFlow基础 一.TensorFlow算法的一般流程 1.导入/生成样本数据集 2.转换和归一化数据:一般来讲,输入样本数据集并不符合TensorFlow期望的形状,所以需要转换数据格式以 ...

  3. 学习TF:《TensorFlow机器学习实战指南》中文PDF+英文PDF+代码

    从实战角度系统讲解TensorFlow基本概念及各种应用实践.真实的应用场景和数据,丰富的代码实例,详尽的操作步骤,带你由浅入深系统掌握TensorFlow机器学习算法及其实现. <Tensor ...

  4. HTTP权威指南:第二章

    URL概览 前面提到,URL资源是HTTP协议所使用的寻找资源位置的定位符.分为三个部分,主要的结构是: 方案://服务器/路径 这种结构使得网络上的每一个资源都只有唯一的命名方法,从而使得浏览器可以 ...

  5. Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)

    前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...

  6. 《SDN核心技术剖析和实战指南》第一章小结

    第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...

  7. PMP备考指南之第二章:项目运作环境

    本文已同步至 GitHub/Gitee/公众号,感兴趣的同学帮忙点波关注~ 第二章:项目运作环境 1. 事业环境因素.组织过程资产 事业环境因素 Enterprise Environmental Fa ...

  8. Windows Forms编程实战学习:第二章 欢迎使用Visual Studio

    第二章 欢迎使用Visual Studio 1,AssemblyInfo文件 包含程序集的属性,向应用程序添加元数据 [assembly:<attribute>(<setting&g ...

  9. java并发编程实战笔记---(第二章)线程安全:正确性

    ThreadA__________     同步 ______________ 异步 ___________     异步 ThreadB__________         ____________ ...

随机推荐

  1. chrome查看JavaScript的堆栈调用

    设置断点之后,查看的时候,注意右侧栏. 在调试按钮下方,有一个watch和call stack,

  2. 接入集团auth流程

    前言 一直对集团的auth系统很感兴趣,所以这次记录下接入集团auth的流程.如果后期有时间,会补充具体的auth实现细节. 正文 一.实现思想 1. 实现思想 明确几个名词:接入方,管理方.接入方指 ...

  3. 什么是webpack以及为什么使用它

    什么是webpack以及为什么使用它 新建 模板 小书匠  在ES6之前,我们要想进行模块化开发,就必须借助于其他的工具.因为开发时用的是高级语法开发,效率非常高,但很可惜的是,浏览器未必会支持或认识 ...

  4. Docker容器技术入门

    独立容器分开的条件: 1.Namespace命名空间 1.主机名和域名,UTS 2.文件系统,mount 3.进程间通信,IPC 4.独立的进程树PID 5.独立的用户User 6.独立的IP地址tc ...

  5. python蒙特卡洛脚本模拟—挑战者号爆炸概率

     python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  6. ubuntu服务器允许Root用户登录

    1.重置root密码 sudo passwd root 2.修改ssh配置文件 sudo vim /etc/ssh/sshd_config后进入配置文件中修改PermitRootLogin后的默认值为 ...

  7. 【web前端】前段时间的面题整理(1)

    这是我的试题答案整理,可能有多种答案.我也就写了一两种.在慢慢整合中 第一题 用js实现随机选取10-100之间的10个数字,存入一个数组,去重后求和(保证这10个数字不能出现重复) 要求:去重不能使 ...

  8. Golang基础(3):数组,切片和字典

    一:数组 数组是一个具有相同类型元素,固定长度的有序集合,一般定义如下:var x [5]int表示数组是一个整数型数组,长度为5数组的几种定义方式 a: var来定义数组,然后依次赋值 packag ...

  9. FLUME安装&环境(一):netcat类型配置

    1.下载软件 在 /opt/deploy 下新建 flume 文件夹: # mkdir / opt/deploy / flume 到Flume官网上http://flume.apache.org/do ...

  10. Java中的内存泄露 和 JVM GC(垃圾回收机制)

    一.什么是Java中的内存泄露? 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点, 首先,这些对象是可达的,即在有向图中,存在通路可以与其相连:其次,这些对象是无用的,即程序以 ...