撒花!《神经网络与深度学习》中文教程正式开源!全书 pdf、ppt 和代码一同放出...
点击上方“AI有道”,选择“置顶”公众号
重磅干货,第一时间送达
红色石头之前在某乎上回答“机器学习该怎么入门”这个问题的时候,曾经给入门学者提过一个建议,就是放弃海量资料。确实,资料不在多而在精!一份优秀的资料完全可以帮助我们快速地入门和进阶。
今天给大家推荐一份最近新出的非常火热的深度学习入门教程:《神经网络与深度学习》,这本书由复旦大学的邱锡鹏老师所著。
《神经网络与深度学习》排在首位的特点就是它是完全的中文教程。我相信大部分深度学习入门学者面对英文教程的时候,战斗力多半会削减大半。而邱锡鹏老师的这本书恰恰为中国学生而著,大大降低了深度学习的语言门槛,让大家有更多的精力放在核心知识内容的学习上。
关于本书
关于本书,邱锡鹏是这样评价的:
近年来,以机器学习、知识图谱为代表的人工智能技术逐渐变得普及。从车牌识别、人脸识别、语音识别、智能问答、推荐系统到自动驾驶,人们在日常生活中都可能有意无意地使用到了人工智能技术。这些技术的背后都离不开人工智能领域研究者们的长期努力。特别是最近这几年,得益于数据的增多、计算能力的增强、学习算法的成熟以及应用场景的丰富,越来越多的人开始关注这一个“崭新”的研究领域:深度学习。深度学习以神经网络为主要模型,一开始用来解决机器学习中的表示学习问题。但是由于其强大的能力,深度学习越来越多地用来解决一些通用人工智能问题,比如推理、决策等。目前,深度学习技术在学术界和工业界取得了广泛的成功,受到高度重视,并掀起新一轮的人工智能热潮。
这本书的作者邱锡鹏老师,目前是复旦大学计算机科学技术学院的博士生导师、自然语言处理与深度学习组的副教授。
《神经网络与深度学习》主要介绍神经网络与深度学习中的基础知识、主要模型(卷积神经网络、递归神经网络等)以及在计算机视觉、自然语言处理等领域的实际应用。
主要内容
这本书目前已经更新完毕,总共包含了 15 章。内容涉及神经网络集基础知识以及经典的 CNN、RNN 模型,还有其在 CV 和 NLP 方面的应用。15 章内容分为三大部分:第一部分为入门篇,包括 1~3 章;第二部分为基础模型,包括 4~10 章;第三部分为进阶模型,包括 11~15 章。
完整书籍目录如下:
第 1 章:绪论
第 2 章:机器学习概述
第 3 章:线性模型
第 4 章:前馈神经网络
第 5 章:卷积神经网络
第 6 章:循环神经网络
第 7 章:网络优化与正则化
第 8 章:注意力机制与外部记忆
第 8 章:无监督学习
第 10 章:模型独立的学习方式
第 11 章:概率图模型
第 12 章:深度信念网络
第 13 章:深度生成模型
第 14 章:深度强化学习
第 15 章:序列生成模型
除了 15 章正文内容外,作者还为我们提供了详细的数学基础知识,放在了附录部分。数学基础总共包含 4 方面内容:
附录 A:线性代数
附录 B:微积分
附录 C:数学优化
附录 D:概率论
这些数学基础知识,可谓是神经网络与深度学习的内功心法!也是本书的最大亮点之一,能够极大提升我们在阅读本书的效率。
课程资源
目前,邱锡鹏老师已经开源了该课程所有的资源,包括书籍 pdf,课程 ppt,书籍相关习题参考代码等。
课程主页:
https://nndl.github.io/
全书 pdf:
https://nndl.github.io/nndl-book.pdf
3 小时课程概要:
https://nndl.github.io/ppt/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E4%B8%8E%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-3%E5%B0%8F%E6%97%B6.pdf
示例代码:
https://github.com/nndl/nndl-codes
课程练习:
https://github.com/nndl/exercise
关于课程练习,作者大都提供了最热门的 PyTorch 和 TensorFlow 两种框架的实现方式。以第 5 章 CNN 为例,我们来看一下相关代码。
PyTorch 实现:
import os
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.utils.data as Data
import torchvision
import torch.nn.functional as F
import numpy as np
learning_rate = 1e-4
keep_prob_rate = 0.7 #
max_epoch = 3
BATCH_SIZE = 50DOWNLOAD_MNIST = False
if not(os.path.exists('./mnist/')) or not os.listdir('./mnist/'):# not mnist dir or mnist is empyt dirDOWNLOAD_MNIST = Truetrain_data = torchvision.datasets.MNIST(root='./mnist/',train=True, transform=torchvision.transforms.ToTensor(), download=DOWNLOAD_MNIST,)
train_loader = Data.DataLoader(dataset = train_data ,batch_size= BATCH_SIZE ,shuffle= True)test_data = torchvision.datasets.MNIST(root = './mnist/',train = False)
test_x = Variable(torch.unsqueeze(test_data.test_data,dim = 1),volatile = True).type(torch.FloatTensor)[:500]/255.
test_y = test_data.test_labels[:500].numpy()class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Sequential(nn.Conv2d( # ???# patch 7 * 7 ; 1 in channels ; 32 out channels ; ; stride is 1# padding style is same(that means the convolution opration's input and output have the same size)in_channels= , out_channels= ,kernel_size= ,stride= ,padding= ,),nn.ReLU(), # activation functionnn.MaxPool2d(2), # pooling operation)self.conv2 = nn.Sequential( # ???# line 1 : convolution function, patch 5*5 , 32 in channels ;64 out channels; padding style is same; stride is 1# line 2 : choosing your activation funciont# line 3 : pooling operation function.)self.out1 = nn.Linear( 7*7*64 , 1024 , bias= True) # full connection layer oneself.dropout = nn.Dropout(keep_prob_rate)self.out2 = nn.Linear(1024,10,bias=True)def forward(self, x):x = self.conv1(x)x = self.conv2(x)x = x.view( ) # flatten the output of coonv2 to (batch_size ,32 * 7 * 7) # ???out1 = self.out1(x)out1 = F.relu(out1)out1 = self.dropout(out1)out2 = self.out2(out1)output = F.softmax(out2)return outputdef test(cnn):global predictiony_pre = cnn(test_x)_,pre_index= torch.max(y_pre,1)pre_index= pre_index.view(-1)prediction = pre_index.data.numpy()correct = np.sum(prediction == test_y)return correct / 500.0def train(cnn):optimizer = torch.optim.Adam(cnn.parameters(), lr=learning_rate )loss_func = nn.CrossEntropyLoss()for epoch in range(max_epoch):for step, (x_, y_) in enumerate(train_loader):x ,y= Variable(x_),Variable(y_)output = cnn(x) loss = loss_func(output,y)optimizer.zero_grad()loss.backward()optimizer.step()if step != 0 and step % 20 ==0:print("=" * 10,step,"="*5,"="*5, "test accuracy is ",test(cnn) ,"=" * 10 )if __name__ == '__main__':cnn = CNN()train(cnn)
TensorFlow 实现:
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)learning_rate = 1e-4
keep_prob_rate = 0.7 #
max_epoch = 2000
def compute_accuracy(v_xs, v_ys):global predictiony_pre = sess.run(prediction, feed_dict={xs: v_xs, keep_prob: 1})correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys, keep_prob: 1})return resultdef weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)def conv2d(x, W):# 每一维度 滑动步长全部是 1, padding 方式 选择 same# 提示 使用函数 tf.nn.conv2dreturn def max_pool_2x2(x):# 滑动步长 是 2步; 池化窗口的尺度 高和宽度都是2; padding 方式 请选择 same# 提示 使用函数 tf.nn.max_poolreturn # define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 784])/255.
ys = tf.placeholder(tf.float32, [None, 10])
keep_prob = tf.placeholder(tf.float32)
x_image = tf.reshape(xs, [-1, 28, 28, 1])# 卷积层 1
## conv1 layer ##W_conv1 = # patch 7x7, in size 1, out size 32
b_conv1 =
h_conv1 = # 卷积 自己选择 选择激活函数
h_pool1 = # 池化 # 卷积层 2
W_conv2 = # patch 5x5, in size 32, out size 64
b_conv2 =
h_conv2 = # 卷积 自己选择 选择激活函数
h_pool2 = # 池化# 全连接层 1
## fc1 layer ##
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)# 全连接层 2
## fc2 layer ##
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# 交叉熵函数
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)with tf.Session() as sess:init = tf.global_variables_initializer()sess.run(init)for i in range(max_epoch):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob:keep_prob_rate})if i % 100 == 0:print(compute_accuracy(mnist.test.images[:1000], mnist.test.labels[:1000]))
开源万岁!这份优秀的深度学习资源,赶快试试吧~
【推荐阅读】
干货 | 公众号历史文章精选(附资源)
我的深度学习入门路线
我的机器学习入门路线图
?欢迎加入
撒花!《神经网络与深度学习》中文教程正式开源!全书 pdf、ppt 和代码一同放出...相关推荐
- Michael Nielsen的神经网络与深度学习入门教程
Michael Nielsen的神经网络与深度学习入门教程 作者:Michael Nielsen 这是我个人以为目前最好的神经网络与机器学习入门资料.作者以MNIST为例详细介绍了神经网络中的基本 ...
- 深度学习掩膜_交叉新趋势|采用神经网络与深度学习来预报降水、温度等案例(附代码/数据/文献)...
欢迎订阅微信公众号:『气象学家』 阅读建议 随着人工智能的发展,拥有了越来越丰富的应用场景,气象行业也不例外,在突破传统预报方法的情况下,神经网络与深度学习来预报气象要素也取得了不错的效果,下面就给出 ...
- 撒花!斯坦福深度学习最新视频发布,吴恩达主讲!
点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 就在 3 月 21 日,由吴恩达开设的斯坦福深度学习课程 CS230 课程视频发布到了网上.视 ...
- 就在刚刚,百度重磅发布《深度学习中文教程实战版》,对外免费开发!
很多小伙伴在后台给我留言,深度学习对零基础技术小白太不友好了-确实,晦涩的理论.冗长的代码.复杂的调试.鱼龙混杂的资料...搞懵了不少同学- 有办法吗?个人认为还是有的,比如大可不必一上手就选择难啃的 ...
- 真香!2020最新版《神经网络与深度学习》中文版更新完毕,PDF免费开放下载~...
介绍 <神经⽹络和深度学习>是⼀本免费的在线书,对读者数学知识需求适度,兼顾理论和动手实践. ⽬前给出了在图像识别.语⾳识别和⾃然语⾔处理领域中很多问题的最好解决⽅案,教读者在神经⽹络和深 ...
- 学习 |《神经网络与深度学习》的讲义
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:专知 AI博士笔记系列推荐 周志华<机器学习>手推笔 ...
- 【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第四周作业(12)
[吴恩达课后编程作业]01 - 神经网络和深度学习 - 第四周 - PA1&2 - 一步步搭建多层神经网络以及应用 上一篇: [课程1 - 第四周测验]※※※※※ [回到目录]※※※※※下一篇 ...
- 复旦邱锡鹏教授公布《神经网络与深度学习》,中文免费下载 | 极客头条
点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 整理 | Jane 出品 | AI科技大本营 优质的人工智能学习资源一直是大家非常关注的,以往我们也推荐过很多 ...
- 火爆网络的《神经网络与深度学习》,有人把它翻译成了中文版!
点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 今天给大家介绍一本非常好的深度学习入门书籍,就是<Neural Network and ...
最新文章
- 将对象序列化与反序列实例
- 我常用的Eclipse插件
- 转:pysqlite笔记
- hive拉链表实现方案一
- Intouch高级报警(报警筛选)
- java日期函数_java常用日期函数总结
- 冒险岛里不合逻辑的地方
- oracle lms进程 内存,lms进程耗用大量内存
- 【算法java版01】:键盘录入一个字符串,将字符串中的大写改成小写,小写改成大写,数字改成*
- 对统驭科目和特别总账标志的理解
- window创建l2tp
- 用pytorch官网命令 安装pytorch1.10.1+CUDA11.1报错
- (HttpClient技术)(58同城系列)58同城登录
- 精美底部营销通用型插件(客服+电话+微信)按钮
- 非盈利组织能力建设探讨
- 复权因子:历史数据库与回测
- 等效结点荷载计算机语言,基于FORTRAN的3D等效结点荷载计算
- python的一些语句的意思
- 关于微信、QQ语音消息,语音电话的时候控制应用音频播放以及暂停
- html中outline属性,CSS outline 属性