人们都说Chainer是一块非常灵活you要用的框架,今天接着项目里面的应用,初步接触一下,涨涨姿势,直接上源码吧,看着好理解。其实跟Tensorflow等其他框架都是一个套路,个人感觉更简洁了。

  1. """
  2. 测试使用
  3. """
  4. import pickle
  5. import time
  6. import numpy as np
  7. import matplotlib.pyplot as plt
  8. from chainer import Chain, Variable, optimizers, serializers
  9. import chainer.functions as F
  10. import chainer.links as L
  11.  
  12. # 创建Chainer Variables变]量
  13. a = Variable(np.array([3], dtype=np.float32))
  14. b = Variable(np.array([4], dtype=np.float32))
  15. c = a**2 +b**2
  16.  
  17. # 5通过data属性检查之前定义的变量
  18. print('a.data:{0}, b.data{1}, c.data{2}'.format(a.data, b.data, c.data))
  19.  
  20. # 使用backward()方法,对变量c进行反向传播.对c进行求导
  21. c.backward()
  22. # 通过在变量中存储的grad属性,检查其导数
  23. print('dc/da = {0}, dc/db={1}, dc/dc={2}'.format(a.grad, b.grad, c.grad))
  24.  
  25. # 在chainer中做线性回归
  26. x = 30*np.random.rand(1000).astype(np.float32)
  27. y = 7*x + 10
  28. y += 10*np.random.randn(1000).astype(np.float32)
  29.  
  30. plt.scatter(x, y)
  31. plt.xlabel('x')
  32. plt.ylabel('y')
  33. plt.show()
  34.  
  35. # 使用chainer做线性回归
  36.  
  37. # 从一个变量到另一个变量建立一个线性连接
  38. linear_function = L.Linear(1, 1)
  39. # 设置x和y作为chainer变量,以确保能够变形到特定形态
  40. x_var = Variable(x.reshape(1000, -1))
  41. y_var = Variable(y.reshape(1000, -1))
  42. # 建立优化器
  43. optimizer = optimizers.MomentumSGD(lr=0.001)
  44. optimizer.setup(linear_function)
  45.  
  46. # 定义一个前向传播函数,数据作为输入,线性函数作为输出
  47. def linear_forward(data):
  48. return linear_function(data)
  49.  
  50. # 定义一个训练函数,给定输入数据,目标数据,迭代数
  51. def linear_train(train_data, train_traget, n_epochs=200):
  52. for _ in range(n_epochs):
  53. # 得到前向传播结果
  54. output = linear_forward(train_data)
  55. # 计算训练目标数据和实际标数据的损失
  56. loss = F.mean_squared_error(train_traget, output)
  57. # 在更新之前将梯度取零,线性函数和梯度有非常密切的关系
  58. # linear_function.zerograds()
  59. linear_function.cleargrads()
  60. # 计算并更新所有梯度
  61. loss.backward()
  62. # 优化器更新
  63. optimizer.update()
  64.  
  65. # 绘制训练结果
  66. plt.scatter(x, y, alpha=0.5)
  67. for i in range(150):
  68. # 训练
  69. linear_train(x_var, y_var, n_epochs=5)
  70. # 预测值
  71. y_pred = linear_forward(x_var).data
  72. plt.plot(x, y_pred, color=plt.cm.cool(i / 150.), alpha=0.4, lw=3)
  73.  
  74. slope = linear_function.W.data[0, 0] # linear_function是之前定义的连接,线性连接有两个参数W和b,此种形式可以获取训练后参数的值,slope是斜率的意思
  75. intercept = linear_function.b.data[0] # intercept是截距的意思
  76. plt.title("Final Line: {0:.3}x + {1:.3}".format(slope, intercept))
  77. plt.xlabel('x')
  78. plt.ylabel('y')
  79. plt.show()

Chainer的初步学习的更多相关文章

  1. json2.js的初步学习与了解

    json2.js的初步学习与了解,想要学习json的朋友可以参考下. json2.js的初步学习与了解 1.)该js的下载地址是:http://www.json.org/json2.js 2.)在页面 ...

  2. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  3. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

  4. EF Codefirst 初步学习(二)—— 程序管理命令 更新数据库

    前提:搭建成功codefirst相关代码,参见EF Codefirst  初步学习(一)--设置codefirst开发模式 具体需要注意点如下: 1.确保实体类库程序生成成功 2.确保实体表类库不缺少 ...

  5. 初步学习python

    自计算机诞生以来,也伴随着计算机语言的诞生,现在,全世界的编程语言有600多种,但流行的编程语言也就20多种. Java和C一直占据着前两名.但是近年来伴随着人工智能的发展,Python发展迅猛,以其 ...

  6. Git的初步学习

    前言 感谢! 承蒙关照~ Git的初步学习 为什么要用Git和Github呢?它们的出现是为了用于提交项目和存储项目的,是一种很方便的项目管理软件和网址地址. 接下来看看,一家公司的基本流程图: 集中 ...

  7. 语法分析器初步学习——LISP语法分析

    语法分析器初步学习——LISP语法分析 本文参考自vczh的<如何手写语法分析器>. LISP的表达式是按照前缀的形式写的,比如(1+2)*(3+4)在LISP中会写成(*(+ 1 2)( ...

  8. 状态保持以及AJAX的初步学习

    嘿嘿,今天学习的有点迷茫哦,主要学习把验证码使用在登录页面时间的一些逻辑,学习这个时间并没有那么的迷惑哦,可是自己写程序时间倒是有点反应迟钝,不过还好总是在最后搞清楚啦,另外就是一步一步的学习是接近项 ...

  9. LinQ的初步学习与总结

    嘿嘿,说起来ORM和LinQ,就感觉离我好遥远的,在学校是没有学习的,所以总感觉学习了LinQ就是大神,现在嘛,终于也体会一点,感觉LinQ只是初步学习,没有太难,当然以后使用在项目中就没有这样的简单 ...

随机推荐

  1. 开发还是应该使用linux

    这几天在Windows系统下,安装了几个IDE,体量大,4.5个G,启动速度慢,占用系统资源多,并且最难受的是,这些IDE的限制性太强,只能按照UI给定的规则来操作,例如现在手中有一个已完成的项目,用 ...

  2. C语言对文件的基本操作

    在C语言中,对于文件的操作是利用FILE结构体进行的. 几个常用的操作文件函数简介 1:打开文件 FILE *fopen( const char *filename, const char *mode ...

  3. Jsoup(三)-- Jsoup使用选择器语法查找DOM元素

    1.Jsoup可以使用类似于CSS或jQuery的语法来查找和操作元素. 2.实例如下: public static void main(String[] args) throws Exception ...

  4. Unity弹出MessageBox

    [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = Char ...

  5. 第十七篇:IO复用之select实现

    前言 在看过前文:初探IO复用后,想必你已对IO复用这个概念有了初步但清晰的认识. 接下来,我要在一个具体的并发客户端中实现它(基于select函数),使得一旦服务器中的客户进程被终止的时候,客户端这 ...

  6. iOS - AVAudioSession详解

    音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实 ...

  7. 由于更换硬盘没有删除系统自启动读取挂载硬盘导致系统报错:fsck.ext4 unable to resolve 'UUID=a4a7a0f7-b54f-4774-9fb1'

    由于更换硬盘没有删除系统自启动读取挂载硬盘导致系统报错:fsck.ext4 unable to resolve 'UUID=a4a7a0f7-b54f-4774-9fb1' 此时进入系统已root模式 ...

  8. VC下遍历文件夹中的所有文件的几种方法

    一.使用::FindFirstFile和::FindNextFile方法 #include "StdAfx.h" #include <windows.h> #inclu ...

  9. Foxmail邮箱最新应用指南二

    Foxmail邮箱最新应用指南二 1.打开Foxmail主界面—工具—账号管理,或者鼠标右击任何已有账号—属性,弹出账号管理窗口,点击左下角的“新建”按钮: 2.输入邮箱地址,下一步→选择邮箱类型(I ...

  10. R语言(入门小练习篇)

    问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...