(keras安装可参考我的文章:Windows 下 Python 3.6 下安装 TensorFlow,和pyopencl没关系)

  首先,你要有一些数学和哲学知识,比如:

  • 听说过【向量】 (知道可以把数写成(1,2,3,4)这种形式即可)

  • 懂一点【抽象】,能提炼出一些事物的关联 (比如,汽车和自行车有什么共同点?)

  • 能不看教程写出python小程序(比如打印helloworld)

  • (技巧:看不很懂就试图“观其大略”)

  对于向量,如果想进一步了解,可以参考视频:

  3Blue1Brown的视频教程(线性代数)

  (你至少会从中习惯,可以把向量竖着写)

  接下来的三个视频也是同样的来源。显然他们说的比我好,我只需要放链接……

  3Blue1Brown的视频教程(神经网络)1

  3Blue1Brown的视频教程(神经网络)2

  3Blue1Brown的视频教程(神经网络)3 (分上下篇)

  再放一个:(我是按顺序放的)

  知乎回答(卷积层)(卷积神经网络简称CNN)

  (作者:地球的外星人君;来源:知乎)

  下面的代码就出自上方回答。但我处理了一下,写成了伪代码……

### 准备原料### 制作饲料### 制作猫### 喂猫

  (笑)大概就是这么个过程,虽然比较抽象,但能够说明问题。具体一点的话,第一步是这样的:

### 准备原料!
import numpyfrom keras.datasets import mnist# data数据,set集合,datasets数据集;    mnist是一个著名的数字图像识别数据集from keras.models import Sequential# model模型;    Sequential 序贯模型(应该就是最简单的模型——层与层相继连接而已)from keras.layers import Dense# layer层;    dense密集的(可能是指普通的一层)from keras.layers import Dropout# dropout丢弃from keras.layers import Flatten# flatten压平,numpy中此名称对应函数是把不管多少维的矩阵中的数 列为一行from keras.layers.convolutional import Conv2D# convolutional卷积;    Conv2D大概是2维卷积from keras.layers.convolutional import MaxPooling2D# MaxPooling 区域中共同最大值 (记得那个回答中的“池化”么)from keras.utils import np_utils# util工具;    np应该是numpyseed = 7
numpy.random.seed(seed)# 随机数初始化,seed种子(如果你知道我的世界种子,就很好理解)# 种子随机就是说,用同一个种子会生成同一个随机数列,即使反复运行

  第二步:(你可能需要事先理解多维数组)

  (代码较宽,向右选中文字可以移动)

### 制作饲料!# 加载信息
(X_train, y_train), (X_test,y_test) = mnist.load_data()# 两个X都是列表,其元素为图像(二维矩阵表示);两个y也都是列表,其元素是X中图像对应的数字;train表示训练用,test表示测试用# 使信息成为模型能处理的格式
X_train = X_train.reshape(X_train.shape[0],28, 28,1).astype('float32')# (张量,英文tensor,0维张量是标量,1维是向量,2维是矩阵,3维大概是立方阵,等等)# n维张量的shape是由各维度上的元素个数组成的n元向量,比如三阶方阵的shape是(3,3)# reshape就是把矩阵按顺序展平后重新拼(比如全是1的三阶方阵一般是这么表示的:[[1,1,1],[1,1,1],[1,1,1]],展平就是只留最外层括号)# 另:最后一个1是图像通道数,灰度图自然是1,三色应该就是3X_test = X_test.reshape(X_test.shape[0],28, 28,1).astype('float32')# 整数类型化为浮点类型X_train = X_train / 255
X_test = X_test / 255# (0-255 -> 0-1)y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)# 序列化,即用[1,0,0,0,0,0,0,0,0,0] 代替 0,[0,1,0,0,0,0,0,0,0,0] 代替 1,[0,0,1,0,0,0,0,0,0,0] 代替 2,等等,# 记得3Blue1Brown视频里输出的样子么?一列num_classes = y_test.shape[1]# 结果数量

  第三步:

### 制作猫!def baseline_model():model = Sequential()# 建一个空的“序贯模型”model.add(Conv2D(32, (3, 3), padding='valid', input_shape=(28, 28,1), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))# 添加卷积层model.add(Conv2D(15, (3, 3), padding='valid' ,activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))# 似乎是再加一个卷积层    (导入部分已经翻译了函数名称)model.add(Flatten())# 进入一维模式    (记得视频里把图像一维化么,这里是先卷积再一维化)model.add(Dense(128, activation='relu'))model.add(Dense(num_classes, activation='softmax'))# “密集层”(似乎也叫“全连接”)model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])# compile编译,这总不该解释运行了……return modelmodel = baseline_model()# (用函数加调用来创建模型“看起来更清晰”)

  第四步:

### 喂猫model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=128, verbose=2)

  运行非常慢(这可是神经网络!),我没有GPU,训练一次大约要40秒(最后一行的epoch表示训练次数)。看着别人的个位数秒数,有点难过。

  (2018-2-6 于地球)

转载于:https://blog.51cto.com/13535617/2069387

一边学,一边写出的人工智能教程(一)相关推荐

  1. 汇编call指令详解_我也能写出雷军的的代码吗?最好的汇编语言入门教程在这里!...

    作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2018/01/ 之前,嵌入式Arm曾经发送过一篇名<给跪了!来看看雷军 1994 年写的代码,经典老古董(附完 ...

  2. python学到什么程度可以写爬虫-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间...

    学习 Python 的三种境界 前言王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:"昨夜西风凋碧树,独上高楼,望尽天涯路'. ...

  3. 学python需要多久-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间

    学习 Python 的三种境界 前言王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:"昨夜西风凋碧树,独上高楼,望尽天涯路'. ...

  4. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享

    AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享 原文:AY写给国人的教程- VS2017 Live Unit Testin ...

  5. code blocks代码性能分析_Julia系列教程13--如果写出高性能的Julia代码

    避免全局变量https://www.zhihu.com/video/1113506985873588224 code generationhttps://www.zhihu.com/video/111 ...

  6. 《重学设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料...

    持续坚持原创输出,点击蓝字关注我吧 作者:小傅哥 博客:https://bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获!???? ❞ 目录 一.前言 二.简介 1. 谁发明了设 ...

  7. 《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料...

    持续坚持原创输出,点击蓝字关注我吧 作者:小傅哥 博客:https://bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获!???? ❞ 目录 一.前言 二.简介 1. 谁发明了设 ...

  8. 学了编程却写出错误代码?程序运行结果与想象不符?当bug出现时该何去何从,别担心,这篇文章统统告诉你!手把手带你调试代码,让bug原形毕露!

    [手把手带你搞定]实用调试技巧 什么是bug 调试及调试的重要性 什么是调试 调试的基本步骤 1. 发现程序错误的存在 2. 以隔离.消除等方式对错误进行定位 3. 确定错误产生的原因 4. 提出纠正 ...

  9. 零基础入门学完Java?如何写出一份漂亮的简历,建议如下

    现在互联网产业非常的好,很多人想要转行做Java开发,也就是我们常说的程序员,之所以这么多人想要转行程序员,就是因为程序员的工作工资比很多工作的工资高几倍.在这个每个人都缺钱的时代,每个人都想多赚钱. ...

最新文章

  1. python提高照片分辨率怎么调_实拍16张菊花特写照片,运用暗色调表现,其质感表现得怎么样?...
  2. java跳转语句包含goto_Java 语句标签实现goto跳转
  3. Pinging ? with 32 bytes of data 故障解决
  4. 计算机视觉:让冰冷的机器看懂这个多彩的世界
  5. 设计模式——代理模式(思维导图)
  6. [Tip]ActiveScaffold本地化
  7. JSTL—fn使用方法总结
  8. 概率Probability的本质是什么?[附概率基础知识,文末可下载28页PDF]
  9. activiti实现请假流程
  10. android bootload漏洞,一加6手机的Bootloader漏洞可让攻击者控制设备
  11. java 上传图片 生成缩略图_上传图片同时生成缩略图
  12. css3中-moz、-ms、-webkit,-o分别代表的意思,以及微信浏览器内核分析
  13. 快速学习nodejs系列:微信公众号开发一之环境准备
  14. 哭了,谁还会心疼?累了,谁让我依靠?
  15. matlab自学入门
  16. [点点搬家]与Perl厮混后感觉嘚儿嘚儿的
  17. JOIN连接:LEFT OUTER JOIN
  18. VS Code如何设置背景色
  19. 常用符号计算机输入法,玩电脑必备:一些特殊符号的组合输入法
  20. video.js API 详解

热门文章

  1. Jqgrid pager 关于“local” dataType 动态加载数据分页的研究(没好用的研究结果)...
  2. QT笔记之VS2010 Qt中导入qrc资源文件
  3. 4_1网络学习第一天后感--网络数据下载
  4. javascript监测form是否提交
  5. C++_二维数组_定义方式_数组名称的作用_案例考试成绩统计---C++语言工作笔记021
  6. Netty工作笔记0043---单Reactor多线程模式
  7. Web前端工作笔记011---ztree的使用方法_大全
  8. SpringCloud工作笔记065---lombok的使用和原理_在开发工具STS_eclipse_Idea中集成lombok
  9. SpringCloud学习笔记024---SpringBoot中使用大部分公用的配置记录
  10. 杭电2094产生冠军