为啥我的unity5.4一个对象不能同时运行多个脚本了,inspector里面三个脚本都打了对号,但只运行一个
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我的unity5.4一个对象不能同时运行多个脚本了,inspector里面三个脚本都打了对号,但只运行一个相关的知识,希望对你有一定的参考价值。
是我编程问题,已经解决了
参考技术A 这个所有脚本都会运行的……为啥我的简单 pytorch 网络不能在 GPU 设备上运行?
【中文标题】为啥我的简单 pytorch 网络不能在 GPU 设备上运行?【英文标题】:Why doesn't my simple pytorch network work on GPU device?为什么我的简单 pytorch 网络不能在 GPU 设备上运行? 【发布时间】:2019-01-07 09:47:42 【问题描述】:我根据教程构建了一个简单的网络,但出现此错误:
RuntimeError:预期的类型为 torch.cuda.FloatTensor 的对象,但已找到 为参数 #4 'mat1' 输入 torch.FloatTensor
有什么帮助吗?谢谢!
import torch
import torchvision
device = torch.device("cuda:0")
root = '.data/'
dataset = torchvision.datasets.MNIST(root, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=4)
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.out = torch.nn.Linear(28*28, 10)
def forward(self, x):
x = x.view(x.size(0), -1)
x = self.out(x)
return x
net = Net()
net.to(device)
for i, (inputs, labels) in enumerate(dataloader):
inputs.to(device)
out = net(inputs)
【问题讨论】:
这个问题是关于 PyTorch,而不是 CUDA。这就是我删除标签的原因。两次。请不要再添加了 【参考方案1】:TL;DR 这是解决方法
inputs = inputs.to(device)
为什么?!torch.nn.Module.to()
和 torch.Tensor.to()
之间存在细微差别:Module.to()
是 就地 运算符,Tensor.to()
不是。因此
net.to(device)
更改net
本身并将其移动到device
。另一方面
inputs.to(device)
不更改inputs
,而是返回inputs
的副本,该inputs
位于device
。要使用该“设备上”副本,您需要将其分配给一个变量,因此
inputs = inputs.to(device)
【讨论】:
有效!太感谢了!我花了几个小时寻找答案。 @Harkonnen 很高兴我能提供帮助。在阅读 pytorch 文档时,您应该注意“就地”操作:有些方法是就地的,有些不是,有些方法具有“就地”变体...... 我有这个错误,因为我没有设置我的GPU设备,为:device = torch.device('cuda')【参考方案2】:import torch
import numpy as np
x = torch.tensor(np.array(1), device='cuda:0')
print(x.device) # Prints `cpu`
x = torch.tensor(1, device='cuda:0')
print(x.device) # Prints `cuda:0`
现在张量驻留在 GPU 上
【讨论】:
你想从答案中说什么不清楚。请您解释为什么使用 numpy 没有将张量推送到 cuda以上是关于为啥我的unity5.4一个对象不能同时运行多个脚本了,inspector里面三个脚本都打了对号,但只运行一个的主要内容,如果未能解决你的问题,请参考以下文章
为啥框架集中两个子页面不能同时运行settimeout或者setInterval函数