shusentang / dive-into-dl-pytorch Goto Github PK
View Code? Open in Web Editor NEW本项目将《动手学深度学习》(Dive into Deep Learning)原书中的MXNet实现改为PyTorch实现。
Home Page: http://tangshusen.me/Dive-into-DL-PyTorch
License: Apache License 2.0
本项目将《动手学深度学习》(Dive into Deep Learning)原书中的MXNet实现改为PyTorch实现。
Home Page: http://tangshusen.me/Dive-into-DL-PyTorch
License: Apache License 2.0
python版本为3.6.3
pytorch版本为1.2.0
建议将原代码
init.normal_(net[0].weight, mean=0, std=0.01)
init.constant_(net[0].bias, val=0) # 也可以直接修改bias的data: net[0].bias.data.fill_(0)
更改为:
init.normal_(net.linear.weight, mean=0, std=0.01)
init.constant_(net.linear.bias, val=0) # 也可以直接修改bias的data: net[0].bias.data.fill_(0)
bug描述
描述一下你遇到的bug, 例如报错位置、报错信息(重要, 可以直接截个图)等
版本信息
pytorch:
torchvision:
torchtext:
...
bug描述
文中是这样写的:
mean = X.mean(dim=0, keepdim=True).mean(dim=2, keepdim=True).mean(dim=3, keepdim=True)
而原文是这样的:
mean = X.mean(axis=(0, 2, 3), keepdims=True)
事实上,pytorch 也支持类似写法,如下:
mean = X.mean(dim=(0, 2, 3), keepdim=True)
这种写法除了简洁外,数值上应该更精确一些。
版本信息
pytorch: 1.3.1
...
bug描述
def sgd(params, lr, batch_size):
# 为了和原书保持一致,这里除以了batch_size,但是应该是不用除的,因为一般用PyTorch计算loss时就默认已经沿batch维求了平均了。除batch size后训练速度变慢
for param in params:
param.data -= lr * param.grad #/ batch_size
首先说batch_size需要除就必须除,不能除就必须不除,没有应该不应该。
loss的定义如果是如3.7节中调用nn.CrossEntropyLoss(),是不能除以batch_size的,原因如源码所述,CrossEntropyLoss()已经沿batch_size取了平均。
而如果loss是采用3.6节中自定义的cross_entropy函数,而且在训练时l = loss(y_hat, y).sum()(计算的是批量样本loss和,不是平均),那在sgd中必须要除以batch_size,而如果定义l = loss(y_hat, y).sum()/batch_size,效果跟调用nn.CrossEntropyLoss()是相同的,此时sgd就不能再除以batch_size了。
这里定义loss的方式不同,带来的另一个问题是每一个epoch结束后计算平均loss的方式,如#74 所述,如果loss的定义是3.7节中调用nn.CrossEntropyLoss(),在print loss时,应该是train_loss_sum/len(train_iter),而如果l = loss(y_hat, y).sum(),才是train_loss_sum/n
版本信息
pytorch:1.3.1
torchvision:0.4.2
torchtext:0.4.0
...
执行后,总是少模块,还得关掉jupyter安装,又来一遍。然后又提示少其他模块。
bug描述
3.6节运行时出错,猜测与“import d2lzh_pytorch as d2l”有关。
下面是具体bug信息:
bash: 行 1: 12013 段错误 (核心已转储) env "PYCHARM_HOSTED"="1" "PYTHONUNBUFFERED"="1" "PYTHONIOENCODING"="UTF-8" "PYCHARM_MATPLOTLIB_PORT"="49946" "JETBRAINS_REMOTE_RUN"="1" "PYTHONPATH"="/home/zjr/pytorch:/home/zjr/pytorch/SR-GNN-master/pytorch_code:/home/zjr/.pycharm_helpers/pycharm_matplotlib_backend" '/home/zjr/anaconda3/envs/pytorch/bin/python3.6' '-u' '/home/zjr/pytorch/pytorch-pretrain/3.6_simple.py'
版本信息
pytorch:1.2.0
torchvision:0.4.0
torchtext:0.3.1
...
bug描述
在预处理数据代码中,原文为
all_features[numeric_features] = all_features[numeric_features].fillna(0)
最终输出应为 all_features.shape = (2919, 331)
而在您编写的代码中,此句变为
all_features = all_features.fillna(0)
最终输出为all_features.shape = (2919, 354),
初次接触pandas,不知这个是您的疏忽还是由于我对代码的理解不充分,望解答,十分感谢。
版本信息
pytorch:
torchvision:
torchtext:
...
bug描述
chapter05中的5.10_batch-norm.md文件,转为pdf的时候报错。信息如下:
Error producing PDF.
! Missing { inserted.
_um_group_begin:
l.135 [\boldsymbol{\mu}\mathcal
对markdown和LaTeX的语法不熟,不知道是什么原因?其他的章节都没问题。
谢谢
版本信息
pytorch:
torchvision:
torchtext:
...
原文中写到
如果我们想要修改tensor的数值,但是又不希望被autograd记录(即不会影响反向传播),那么我么可以对tensor.data进行操作.
In [14]:
x = torch.ones(1,requires_grad=True)
print(x.data) # 还是一个tensor
print(x.data.requires_grad) # 但是已经是独立于计算图之外
y = 2 * x
x.data *= 100 # 只改变了值,不会记录在计算图,所以不会影响梯度传播
y.backward()
print(x) # 更改data的值也会影响tensor的值
print(x.grad)
-----------输出结果-----------
tensor([1.])
False
tensor([100.], requires_grad=True)
tensor([2.])
我做了些尝试性的改变,发现输出了一些我无法理解的结果,比如把y = 2 * x
改成y = 2 * x * x
时,print(x.grad)
的输出结果变成202
;如果把y = 2 * x
改成y = 2 * x * x * x
,print(x.grad)
的输出结果变成20202
。
虽然结果似乎有一定的规律,但是我没找到。这种情况下应该怎么解释呢?
RuntimeError Traceback (most recent call last)
in
1 num_epochs = 5
----> 2 d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, optimizer)
D:\Users\Administrator\Anaconda3\Dive-into-DL-PyTorch-master\code\d2lzh_pytorch\utils.py in train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params, lr, optimizer)
140 train_acc_sum += (y_hat.argmax(dim=1) == y).sum().item()
141 n += y.shape[0]
--> 142 test_acc = evaluate_accuracy(test_iter, net)
143 print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f'
144 % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))
D:\Users\Administrator\Anaconda3\Dive-into-DL-PyTorch-master\code\d2lzh_pytorch\utils.py in evaluate_accuracy(data_iter, net, device)
212 if isinstance(net, torch.nn.Module):
213 net.eval() # 评估模式, 这会关闭dropout
--> 214 acc_sum += (net(X.to(device)).argmax(dim=1) == y.to(device)).float().sum().cpu().item()
215 net.train() # 改回训练模式
216 else: # 自定义的模型, 3.13节之后不会用到, 不考虑GPU
d:\program files\python36\lib\site-packages\torch\nn\modules\module.py in call(self, *input, **kwargs)
539 result = self._slow_forward(*input, **kwargs)
540 else:
--> 541 result = self.forward(*input, **kwargs)
542 for hook in self._forward_hooks.values():
543 hook_result = hook(self, input, result)
d:\program files\python36\lib\site-packages\torch\nn\modules\container.py in forward(self, input)
90 def forward(self, input):
91 for module in self._modules.values():
---> 92 input = module(input)
93 return input
94
d:\program files\python36\lib\site-packages\torch\nn\modules\module.py in call(self, *input, **kwargs)
539 result = self._slow_forward(*input, **kwargs)
540 else:
--> 541 result = self.forward(*input, **kwargs)
542 for hook in self._forward_hooks.values():
543 hook_result = hook(self, input, result)
d:\program files\python36\lib\site-packages\torch\nn\modules\linear.py in forward(self, input)
85
86 def forward(self, input):
---> 87 return F.linear(input, self.weight, self.bias)
88
89 def extra_repr(self):
d:\program files\python36\lib\site-packages\torch\nn\functional.py in linear(input, weight, bias)
1368 if input.dim() == 2 and bias is not None:
1369 # fused op is marginally faster
-> 1370 ret = torch.addmm(bias, input, weight.t())
1371 else:
1372 output = input.matmul(weight.t())
RuntimeError: Expected object of device type cuda but got device type cpu for argument #1 'self' in call to _th_addmm
版本信息
pytorch: 1.3.0
torchvision: 0.4.1
torchtext: 0.4.0
...
bug描述
描述一下你遇到的bug, 例如报错位置、报错信息(重要, 可以直接截个图)等
我在3.10 节中引入 d2lzh_pytorch 这个包后总是报错,说我没有这个包,我想问问这个包应该是在哪里安装的,我查了没查到,谢谢作者解答
版本信息
pytorch: 1.3.1
torchvision: 0.4.2
torchtext: 0.4.0
...
最后一个图片放错啦
可以在CI里边做静态网页生成和pdf生成,在CD里边部署网页,这样就可以只专注于markdown及图片的修改。
看了下,作者似乎是想放到github pages上,travis-ci 也有相应的支持。
bug描述
关于第五章的函数 d2l.train_ch5 中的batch_count=0难道不应该写在循环内部吗,请问老师您为什么把问题关掉了,不太理解,所以再来询问一下。
版本信息
pytorch:
torchvision:
torchtext:
...
bug描述
3.2.7训练模型 代码运行报错
RuntimeError Traceback (most recent call last)
in
8 # 和y分别是小批量样本的特征和标签
9 for X, y in data_iter(batch_size, features, labels):
---> 10 l = loss(net(X, w, b), y).sum() # l是有关小批量X和y的损失
11 l.backward() # 小批量的损失对模型参数求梯度
12 sgd([w, b], lr, batch_size) # 使用小批量随机梯度下降迭代模型参数
in linreg(X, w, b)
1 def linreg(X, w, b): # 本函数已保存在d2lzh_pytorch包中方便以后使用
----> 2 return torch.mm(X, w) + b
RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #2 'mat2'
将3.2.3初始化参数部分类型改为double或float64可运行
版本信息
pytorch:1.2.0
torchvision:0.4.0
torchtext:?
安装指令是
conda install pytorch torchvision cudatoolkit=10.0
使用清华镜像
bug描述
描述一下你遇到的bug, 例如报错位置、报错信息(重要, 可以直接截个图)等
版本信息
pytorch:
torchvision:
torchtext:
...
请问能否根据现在目前已有的版本生成一个pdf,这样阅读起来方便,阅读的人也会增加很多,方便项目推广。大家边阅读边反馈,最终版的质量会提高很多。
如果你们方便的话。
x = torch.ones(6, 8, dtype=torch.float)
x[:, 2:6] = 0
k = torch.tensor([[1, -1]], dtype=torch.float)
y = corr2d(x, k)
RuntimeError: expected backend CPU and dtype Float but got backend CPU and dtype Long
bug描述
描述一下你遇到的bug, 例如报错位置、报错信息(重要, 可以直接截个图)等
版本信息
pytorch:
torchvision:
torchtext:
...
def dropout(X, drop_prob):
X = X.float()
assert 0 <= drop_prob <= 1
keep_prob = 1 - drop_prob
# 这种情况下把全部元素都丢弃
if keep_prob == 0:
return torch.zeros_like(X)
mask = (torch.randn(X.shape) < keep_prob).float()
return mask * X / keep_prob
此处randn生成的数不是分布在0-1之间,导致drop_prob为0时也会产生丢弃。
X = torch.arange(16).view(2, 8)
dropout(X, 0)
tensor([[ 0., 0., 2., 3., 4., 5., 6., 7.],
[ 8., 9., 10., 0., 12., 13., 14., 15.]])
教程中的表述,虽然没有明说,不过给人感觉是view这种操作不会改变id值。
但在我试验中,tensor在view之后,会变为新的id。如下代码:
x = torch.randn(1,2)
print(x)
y = x.view(1,2)
print(y)
print(id(x) == id(y))
tensor([[-0.7329, -1.4493]])
tensor([[-0.7329, -1.4493]])
False
不过使用torch自带的equal可以正确检查这两个是不是指向同一个tensor:
x = torch.zeros(3, 5)
y = x.view(3, 5)
print(torch.equal(x, y))
True
不过equal函数要求tensor有相同的size和elements。
python 3.6.7
pytorch 1.1
torchvision 0.3
这一行报错
mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor())
ZeroDivisionError Traceback (most recent call last)
in
----> 1 mnist_train = torchvision.datasets.FashionMNIST(root='/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor())/Datasets/FashionMNIST', train=False, download=True, transform=transforms.ToTensor())
2 mnist_test = torchvision.datasets.FashionMNIST(root='
~/anaconda3/envs/pytorch/lib/python3.6/site-packages/torchvision/datasets/mnist.py in init(self, root, train, transform, target_transform, download)
66
67 if download:
---> 68 self.download()
69
70 if not self._check_exists():
~/anaconda3/envs/pytorch/lib/python3.6/site-packages/torchvision/datasets/mnist.py in download(self)
143 filename = url.rpartition('/')[2]
144 file_path = os.path.join(self.raw_folder, filename)
--> 145 download_url(url, root=self.raw_folder, filename=filename, md5=None)
146 self.extract_gzip(gzip_path=file_path, remove_finished=True)
147
~/anaconda3/envs/pytorch/lib/python3.6/site-packages/torchvision/datasets/utils.py in download_url(url, root, filename, md5)
78 urllib.request.urlretrieve(
79 url, fpath,
---> 80 reporthook=gen_bar_updater()
81 )
82 except OSError:
~/anaconda3/envs/pytorch/lib/python3.6/urllib/request.py in urlretrieve(url, filename, reporthook, data)
272
273 if reporthook:
--> 274 reporthook(blocknum, bs, size)
275
276 while True:
~/anaconda3/envs/pytorch/lib/python3.6/site-packages/torchvision/datasets/utils.py in bar_update(count, block_size, total_size)
13 pbar.total = total_size
14 progress_bytes = count * block_size
---> 15 pbar.update(progress_bytes - pbar.n)
16
17 return bar_update
~/anaconda3/envs/pytorch/lib/python3.6/site-packages/tqdm-4.7.2-py3.6.egg/tqdm/_tqdm.py in update(self, n)
687 if self.smoothing and delta_t:
688 self.avg_time = delta_t / delta_it
--> 689 if self.avg_time is None
690 else self.smoothing * delta_t / delta_it +
691 (1 - self.smoothing) * self.avg_time
ZeroDivisionError: float division by zero
bug描述
描述一下你遇到的bug, 例如报错位置、报错信息(重要, 可以直接截个图)等
如题
版本信息
pytorch:1.2
torchvision:
torchtext:
...
求解
Sequential、ModuleList、ModuleDict类继承自BlModuleock类。
最后应该是继承Module类吧。
感谢大佬给初学者提供PyTorch框架版!
bug描述
3.7 3.9中计算交叉熵损失函数时使用tf.nn.CrossEntropyLoss()时,已经作了平均。
但是计算每一个epoch的损失时,又除了整个训练集样本的个数n ,这样对吗?
版本信息
pytorch:1.13
torchvision:0.4.2
torchtext:无
...
在mxnet原作9.4中,涉及到了MultiBoxTarget、MultiBoxPrior、MultiBoxDetection这几个库函数。我想探讨下在pytorch中相对应的库函数是什么呢?还是说只能自己手动实现这些功能?
针对使用Mac/Linux等终端(不支持Windows)各位,可以快速本地以web方式访问《动手学深度学习》(PyTorch版)项目。
这不是一个
Issue
,目的想让大家本地阅读本文档时更为舒服一些 :))
管理员可随时关闭掉......
git clone https://github.com/ShusenTang/Dive-into-DL-PyTorch.git
make wwwdocs
命令# cd Dive-into-DL-PyTorch
# make wwwdocs
bash script/prepare_wwwdocs.sh
本脚本将自动创建 .wwwdocs 目录
初始化项目依赖时将使用 docsify 工具自动生成本地文档web访问文档
本web文档为绿色创建,不会对现有项目产生副作用!不会产生产生git需要提交文件!
请放心食用 :))
根据项目README.md自动生成目录文件 ......
根据项目根目录下README.md以及docs/README.md合并生成项目所需${docs}导航 ......
生成 docsify 所需入口文件......
为各章节markdown文件以及图片建立软连接 ......
启动web server,稍后请在浏览器中打开:http://localhost:3000 ,即可访问 ......
Serving /Users/nieyong/ai/book/Dive-into-DL-PyTorch/.wwwdocs now.
Listening at http://localhost:3000
http://127.0.0.1:3000/
即可完整显示所有数学公式了启动成功之后,请在chrome等现代浏览器内访问:http://localhost:3000
即可。
内置JS完整支持数学公式显示(不再需要在Chrome上安装任何插件):
本方案非常绿色:
git fetch ; git rebase
命令即可更新上游文档内容
http://127.0.0.1:3000/
会实时刷新等希望能给各位带来一点帮助 :))
梯度哪里有一堆类似如下的符号:
数学上,如果有一个函数值和自变量都为向量的函数
$$
J=\left(\begin{array}{ccc}
\frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}}\
\vdots & \ddots & \vdots\
\frac{\partial y_{m}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}
\end{array}\right)
看不太懂,可否修正一下?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.