红色石头的个人网站:www.redstonewill.com

今天给大家介绍一个深度学习入门和进阶的绝佳教程:《Grokking Deep Learning》,中文译名为:《图解深度学习》。这本书是由 Manning 出版社出版,并采用 MEAP(订阅更新方式),从 2016 年 8 月开始,一直采用不定期更新的方式放送。时至今日,这本书终于完本啦,完结撒花。本书主打入门教学,书中各种插画丰富生动,是学习深度学习的入门好书。

作者简介

这本书的作者 Andrew Trask 是 DeepMind 的科学家,同时也是 OpenMinded的负责人,博士毕业于牛津大学。

个人主页是:https://iamtrask.github.io/

书籍简介

这本书会教你的从直觉的角度深入学习的基础知识,这样你就可以了解机器如何使用深度学习进行学习。这本书没有重点学习框架,如 Torch、TensorFlow 或 Keras。相反,它的重点是教你熟悉框架背后的深层次学习方法。一切都将从头开始,只使用 Python 和 NumPy。这样,你就能理解训练神经系统的每一个细节。网络,而不仅仅是如何使用代码库。你应该把这本书当作掌握其中一个主要框架的必要条件。

该书总共分为两大部分,第一部分是介绍神经网络的基础知识,总共包含 9 章内容:

第二部分是介绍深度学习中的高级层和架构,总共包含 7 章内容:

《图解深度学习》最大的特点就是在调包类书籍泛滥的当下,这本书可以说是非常良心了,作者通过 10 多章的铺垫,最终完成了一个微型的深度学习库,这应该也是本书的最大价值。

书籍资源

《图解深度学习》已经开放了在线版阅读并开源了书籍中所有的源代码。

在线阅读地址:

https://livebook.manning.com/#!/book/grokking-deep-learning/brief-contents/v-12/

代码地址:

https://github.com/iamtrask/Grokking-Deep-Learning

本书所有的代码实现都是基于 Python,并没有简单地调用库。这样能够最大程度地帮助你理解深度学习中的概念和原理。例如,CNN 模型的 Python 实现:

import numpy as np, sys
np.random.seed(1)from keras.datasets import mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()images, labels = (x_train[0:1000].reshape(1000,28*28) / 255,
y_train[0:1000])one_hot_labels = np.zeros((len(labels),10))
for i,l in enumerate(labels):
one_hot_labels[i][l] = 1
labels = one_hot_labelstest_images = x_test.reshape(len(x_test),28*28) / 255
test_labels = np.zeros((len(y_test),10))
for i,l in enumerate(y_test):
test_labels[i][l] = 1def tanh(x):
return np.tanh(x)def tanh2deriv(output):
return 1 - (output ** 2)def softmax(x):
temp = np.exp(x)
return temp / np.sum(temp, axis=1, keepdims=True)alpha, iterations = (2, 300)
pixels_per_image, num_labels = (784, 10)
batch_size = 128input_rows = 28
input_cols = 28kernel_rows = 3
kernel_cols = 3
num_kernels = 16hidden_size = ((input_rows - kernel_rows) *
(input_cols - kernel_cols)) * num_kernels# weights_0_1 = 0.02*np.random.random((pixels_per_image,hidden_size))-0.01
kernels = 0.02*np.random.random((kernel_rows*kernel_cols,
num_kernels))-0.01weights_1_2 = 0.2*np.random.random((hidden_size,
num_labels)) - 0.1def get_image_section(layer,row_from, row_to, col_from, col_to):
section = layer[:,row_from:row_to,col_from:col_to]
return section.reshape(-1,1,row_to-row_from, col_to-col_from)for j in range(iterations):
correct_cnt = 0
for i in range(int(len(images) / batch_size)):
batch_start, batch_end=((i * batch_size),((i+1)*batch_size))
layer_0 = images[batch_start:batch_end]
layer_0 = layer_0.reshape(layer_0.shape[0],28,28)
layer_0.shapesects = list()
for row_start in range(layer_0.shape[1]-kernel_rows):
for col_start in range(layer_0.shape[2] - kernel_cols):
sect = get_image_section(layer_0,
row_start,
row_start+kernel_rows,
col_start,
col_start+kernel_cols)
sects.append(sect)expanded_input = np.concatenate(sects,axis=1)
es = expanded_input.shape
flattened_input = expanded_input.reshape(es[0]*es[1],-1)kernel_output = flattened_input.dot(kernels)
layer_1 = tanh(kernel_output.reshape(es[0],-1))
dropout_mask = np.random.randint(2,size=layer_1.shape)
layer_1 *= dropout_mask * 2
layer_2 = softmax(np.dot(layer_1,weights_1_2))for k in range(batch_size):
labelset = labels[batch_start+k:batch_start+k+1]
_inc = int(np.argmax(layer_2[k:k+1]) ==
np.argmax(labelset))
correct_cnt += _inclayer_2_delta = (labels[batch_start:batch_end]-layer_2)\
/ (batch_size * layer_2.shape[0])
layer_1_delta = layer_2_delta.dot(weights_1_2.T) * \
tanh2deriv(layer_1)
layer_1_delta *= dropout_mask
weights_1_2 += alpha * layer_1.T.dot(layer_2_delta)
l1d_reshape = layer_1_delta.reshape(kernel_output.shape)
k_update = flattened_input.T.dot(l1d_reshape)
kernels -= alpha * k_updatetest_correct_cnt = 0for i in range(len(test_images)):layer_0 = test_images[i:i+1]
# layer_1 = tanh(np.dot(layer_0,weights_0_1))
layer_0 = layer_0.reshape(layer_0.shape[0],28,28)
layer_0.shapesects = list()
for row_start in range(layer_0.shape[1]-kernel_rows):
for col_start in range(layer_0.shape[2] - kernel_cols):
sect = get_image_section(layer_0,
row_start,
row_start+kernel_rows,
col_start,
col_start+kernel_cols)
sects.append(sect)expanded_input = np.concatenate(sects,axis=1)
es = expanded_input.shape
flattened_input = expanded_input.reshape(es[0]*es[1],-1)kernel_output = flattened_input.dot(kernels)
layer_1 = tanh(kernel_output.reshape(es[0],-1))
layer_2 = np.dot(layer_1,weights_1_2)test_correct_cnt += int(np.argmax(layer_2) ==
np.argmax(test_labels[i:i+1]))
if(j % 1 == 0):
sys.stdout.write("\n"+ \
"I:" + str(j) + \
" Test-Acc:"+str(test_correct_cnt/float(len(test_images)))+\
" Train-Acc:" + str(correct_cnt/float(len(images))))

资源下载

最后,本书的的前 11 章电子版 pdf 和所有源代码已经打包完毕,需要的可以按照以下方式获取:

1.扫描下方二维码关注 “AI有道” 公众号

2.公众号后台回复关键词:GDL

撒花!《图解深度学习》已开源,16 章带你无障碍深度学习,高中生数学就 ok!相关推荐

  1. 《图解深度学习》图书及代码,16章带你无障碍深度学习

    欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯 [导读]Andrew Trask 是DeepMind的科学家,同时也是OpenMinded的负责人.他著作的<Grokking ...

  2. 一篇文章带你走进深度学习

    文章目录 1.深度学习 1.1机器学习的基本流程 1.2深度学习的原理 1.3深度学习的应用 1.4计算机视觉 2.神经网络 2.1前向传播 2.1.1神经网络的基础 2.1.2损失函数 2.1.3S ...

  3. 西瓜书学习笔记——第十一章:特征选择与稀疏学习

    第十一章:特征选择与稀疏学习 11.1 子集搜索与评价 子集搜索 特征子集评价 11.2 过滤式选择 Relief的相关统计量 11.3 包裹式选择 拉斯维加斯方法和蒙特卡罗方法: 11.4 嵌入式选 ...

  4. Spring MVC学习总结(16)——SpringMVC运行流程深度解析(含代码)

    spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器 ...

  5. 【算法导论】学习笔记——第16章 贪心算法

    贪心算法是使做出的选择看起来都是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解.其实,这个定义旨在说明贪心算法必须伴随做出最优选择,如moving table,我们选择最大重叠数等等.当然 ...

  6. head first python豆瓣_Head First Python 学习心得(1-6章)

    写在前面: "吾尝终日而思矣,不如须臾之所学也:吾尝跂而望矣,不如登高之博见也.登高而招,臂非加长也,而见者远:顺风而呼,声非加疾也,而闻者彰.假舆马者,非利足也,而致千里:假舟楫者,非能水 ...

  7. NIPS论文系列|复数域RNN,深层生成模型,DRL在MDP中的应用(已开源)

    [1] Complex Gated Recurrent Neural Networks Moritz Wolter, Angela Yao University of Bonn, National U ...

  8. 撒花!《神经网络与深度学习》中文教程正式开源!全书 pdf、ppt 和代码一同放出...

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 红色石头之前在某乎上回答"机器学习该怎么入门"这个问题的时候,曾经给入门学 ...

  9. 单摄像头+深度学习实现伪激光雷达,代码已开源

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 上次介绍了双目摄像头如何估计深度的方案.老板表示两个摄像头还是有点贵呀,只用一个能不能做?嗯,没问题! ...

最新文章

  1. Nat. Commun. | 机器学习在化学发现中的应用
  2. 【设计模式】原型模式 ( 浅拷贝 | 深拷贝 | 原型与单例冲突 | 禁用 final )
  3. 兰州大学萃英学院计算机,兰州大学萃英学院.PDF
  4. 160 - 22 CarLitoZ.1
  5. Java编写的统计字符代码
  6. Go embed 简明教程
  7. 蠕虫病毒往往是通过进入计算机系统,2011年上海市高校计算机等级考试1级模拟卷题目...
  8. 再谈 document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth
  9. 老表,教你一招啊!!!如何用python实现将csv文件快速导入数据库,建议收藏!!!
  10. Linux学习笔记(8)
  11. 苹果6s上市时间_苹果6s主板坏了的症状,苹果6s换主板多少钱
  12. 地理加权回归简易总结
  13. 产业互联网周报:博通610亿美元收购VMware;阿里云财报13年来首次年度盈利;华为:对所有供应商提出碳减排要求...
  14. 【python】微信朋友圈数据分析及可视化(爬虫+数据挖掘)
  15. 在Ubuntu20.04(Linux Mint)中同步通达信软件的自选股和画线数据
  16. luogu 2735 电网 皮克公式
  17. 【服务器】 Windows Server 2008 R2 配置HTTPS TLS1.2
  18. 3.3V的稳压管,结果电压变成了2.5V
  19. 一个程序员的个人感悟
  20. 汉诺塔自动解题动画中的iOS开发技巧

热门文章

  1. 处理Xcode8输出无用的Log信息
  2. HttpClient超时设置
  3. kafka系列文章索引
  4. nyoj 998(欧拉定理的运用)
  5. RecSys 2016总结
  6. shell 遍历目录下的所有文件
  7. 清北学堂模拟赛d3t2 b
  8. Linux I/O模型
  9. Go 语言web 框架 Gin 练习4
  10. Python学习笔记: Python 标准库概览