本周的一些错误记录

不知道是自己不太懂得搜索还是知识积累的太少,遇到很多问题都不能很好的解决。

而且网上的一些解决办法也真的是bull  shit。。。。。

 

  1.  关于变量类型不一致的问题

RuntimeError: Function AddBackward0 returned an invalid gradient at index 1 - expected type torch.FloatTensor but got torch.cuda.FloatTensor

这个错误的意思就是 网络的输入和模型中的参数类型不一致,一个是在gpu上的,即cuda.floatTensor, 一个是在cpu上的,即FloatTensor。

网上有各种各样的解答,但最重要的核心问题是:你在初始化模型和输入是有没有加上to(service)。

示例代码如下:

self.FlowNet = self.FlowNet.to(self.device)  # 模型转gpu

self.real_A_1 = input_A[0].to(self.device)   # 输入转gpu

2. 关于模型训练过程中服务器总是挂掉的解决方案

我真的要吐槽一下太过于冷漠的师兄!哼╭(╯^╰)╮  问他怎么回事直接告诉我小窗运行, 让我以为是我一直看着他运行的原因,呜呜呜,气得我今天早上差点哭了。老师周一还要看结果。这是让我哭死的节奏。对叭起,是我不好,荒废时光,做东西还这么慢,出不来好结果,稍微改动一点都要这么久。呜呜呜,人家会慢慢进步的哦!

 这里的解决办法是用screen方法来解决哦。

一句话来讲,就是通过一个命令让所要运行的程序一直挂在服务器上。

这个我也不是很清楚机制,一些命令分享给大家,大家想深入了解的话,搜一下关键词“服务器screen”就好啦。

么么~

screen -S sessionName  创建一个session 
screen -ls  列出所有的session
screen -r 10649 用session -ls可以得到)进入指定screen
screen -d 10649  与10649分离
screen -d -r 10649  重新连接到10649 如果有需要则先分离
screen -x 10649 重新连接到10649

screen -X -S 19983 quit 删除19983

3. pytorch的loss使用

import torch
import numpy as np

loss_fn = torch.nn.MSELoss(reduce=False, size_average=False)

a=np.array([[1,2],[3,4]])
b=np.array([[2,3],[4,5]])

input = torch.autograd.Variable(torch.from_numpy(a))
target = torch.autograd.Variable(torch.from_numpy(b))

这里将Variable类型统一为float()(tensor类型也是调用xxx.float())

loss = loss_fn(input.float(), target.float())
print(loss)

pytorch的loss必须这样定义之后才能使用而不能直接引用输入参数哦。。。。

 

中秋节还在实验室改代码,跑实验的我只能说明,我是个又丑又穷又笨(~ ̄(OO) ̄)ブ滴人。呜呜呜,跑去角落哭一哭了,我们下次见咯。

你可能感兴趣的:(科研记录)