Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在本地上运动我该怎么导入d2lzh_pytorch #29

Closed
gggamemaster opened this issue Oct 14, 2019 · 20 comments
Closed

在本地上运动我该怎么导入d2lzh_pytorch #29

gggamemaster opened this issue Oct 14, 2019 · 20 comments

Comments

@gggamemaster
Copy link

求解

@GSwithAI
Copy link

同问

@ShusenTang
Copy link
Owner

基本上每节都有例子呀,如下图
image
即用sys.path.append(PATH) 把你存放d2lzh_pytorch的路径加进来,然后就可以正常导入了

@GSwithAI
Copy link

基本上每节都有例子呀,如下图
image
即用sys.path.append(PATH) 把你存放d2lzh_pytorch的路径加进来,然后就可以正常导入了

d2lzh_pytorch这个包在哪里下载呢

@ShusenTang
Copy link
Owner

基本上每节都有例子呀,如下图
image
即用sys.path.append(PATH) 把你存放d2lzh_pytorch的路径加进来,然后就可以正常导入了

d2lzh_pytorch这个包在哪里下载呢

就在code文件夹里呀

@gggamemaster
Copy link
Author

我把这个包下了,在conda虚拟环境安装不成功。

@ShusenTang
Copy link
Owner

我把这个包下了,在conda虚拟环境安装不成功。

不用安装(也安装不上),直接用就是,代码就在code文件夹里

@gggamemaster
Copy link
Author

我把utils.py下载下来。导入我的jupyter notebook中,在运行3.7代码的时候出现了bug,我的pytorch是1.3

@ShusenTang
Copy link
Owner

我把utils.py下载下来。导入我的jupyter notebook中,在运行3.7代码的时候出现了bug,我的pytorch是1.3

报错信息贴出来看看

@gggamemaster
Copy link
Author

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)

~\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))

~\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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

@gggamemaster
Copy link
Author

完整的代码
import torch
from torch import nn
from torch.nn import init
import numpy as np
import sys
sys.path.append("..")
import utils as d2l

print(torch.version)

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

num_inputs = 784
num_outputs = 10

class LinearNet(nn.Module):

def init(self, num_inputs, num_outputs):

super(LinearNet, self).init()

self.linear = nn.Linear(num_inputs, num_outputs)

def forward(self, x): # x shape: (batch, 1, 28, 28)

y = self.linear(x.view(x.shape[0], -1))

return y

net = LinearNet(num_inputs, num_outputs)

class FlattenLayer(nn.Module):
def init(self):
super(FlattenLayer, self).init()
def forward(self, x): # x shape: (batch, *, *, ...)
return x.view(x.shape[0], -1)

from collections import OrderedDict
net = nn.Sequential(
# FlattenLayer(),
# nn.Linear(num_inputs, num_outputs)
OrderedDict([
('flatten', FlattenLayer()),
('linear', nn.Linear(num_inputs, num_outputs))])
)

init.normal_(net.linear.weight, mean=0, std=0.01)
init.constant_(net.linear.bias, val=0)
loss = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.1)
num_epochs = 5
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, optimizer)

@ShusenTang
Copy link
Owner

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)

~\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))

~\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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:\anaconda\envs\PyTorch\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

报错信息说得很清楚啦就是device不匹配,应该是你的机器有GPU,你把utils.py里面关于evaluate_accuracy的前几行改成以下应该就可以了:

# ############################ 5.5 #########################
def evaluate_accuracy(data_iter, net, device=None):
    if device is None:
        device = list(net.parameters())[0].device # net的device
    acc_sum, n = 0.0, 0

@gggamemaster
Copy link
Author

谢谢您,经过修改以后已经可以运行了

@gggamemaster
Copy link
Author

代码在实现多层感知机的时候出bug了,bug是由于修改处的代码引起的。
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs,batch_size, params, lr)
AttributeError Traceback (most recent call last)
in
----> 1 d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs,batch_size, params, lr)

~\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))

~\utils.py in evaluate_accuracy(data_iter, net, device)
207 def evaluate_accuracy(data_iter, net, device=None):
208 if device is None:
--> 209 device = list(net.parameters())[0].device # net的device
210 acc_sum, n = 0.0, 0
211 with torch.no_grad():

AttributeError: 'function' object has no attribute 'parameters'

@ShusenTang
Copy link
Owner

代码在实现多层感知机的时候出bug了,bug是由于修改处的代码引起的。
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs,batch_size, params, lr)
AttributeError Traceback (most recent call last)
in
----> 1 d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs,batch_size, params, lr)

~\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))

~\utils.py in evaluate_accuracy(data_iter, net, device)
207 def evaluate_accuracy(data_iter, net, device=None):
208 if device is None:
--> 209 device = list(net.parameters())[0].device # net的device
210 acc_sum, n = 0.0, 0
211 with torch.no_grad():

AttributeError: 'function' object has no attribute 'parameters'

这里是因为传入net不是一个PyTorch模型而是我们自己写的一个函数,所以没有parameter这个是属性,所以我任务把utils里面的evaluate_accuracy的第一行

if device is None:

改成

if device is None and isinstance(net, torch.nn.Module):

应该就可以了。

@TengFeiHan0
Copy link

我导入路径了为什么还不行呢?
sys.path.append("/home/tengfeihan/Dive-into-DL-PyTorch/code/d2lzh_pytorch") 新手不太会 @ShusenTang

@gggamemaster
Copy link
Author

gggamemaster commented Oct 16, 2019 via email

ShusenTang pushed a commit that referenced this issue Oct 18, 2019
* save changes

* 保存更改

* 增加说明

* 修正文档标题

* fix typo (#24)

1.补全括号
2.badbmm -> baddbmm

* MathJax渲染BUG修复

* Update issue templates

* Update issue templates

* fix bug in d2l evaluate_accuracy

* 修复偶现数学公式渲染问题,兼容性增强

* 微调_格式,增加markdown在web端docsify的兼容性,同时也方便突出_字面意义

* 同步https://github.com/d2l-ai/d2l-zh该文档公式展示,推导清晰多了

* w,b为float32在macbook终端下编译出错,报RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #2 'mat2',修改成float64,更为兼容多数平台。

* fix bug: issue #29 #30

* 增加单个文档二级标题导航

* 增加单个文档内二三级导航动态合并到左边sidebar中,增加search,微调样式等

* 代码格式以及文辞微调
@alljie-cool
Copy link

image

@ShusenTang
Copy link
Owner

@alljie-cool 首先sys.append.append("..")是为了把父目录加入工作区(因为d2l_pytorch在父目录),我不知道为什么在你这不行。我提供一个解决方案,因为d2l_pytorch所有代码都在d2l_pytorch/utils.y中,所以你可以把这个utils.py放入代码目录里,这样就可以在代码中import utils as d2l,遇到问题可以用python 导入py文件作关键词google

@DayBright-David
Copy link

DayBright-David commented May 13, 2020

截屏2020-05-13 下午1 41 56

请教:这个怎么解决啊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants
@ShusenTang @gggamemaster @GSwithAI @TengFeiHan0 @DayBright-David @alljie-cool and others