我为我的第一个 pytorch 模型设置了一个玩具示例:
x = torch.from_numpy(np.linspace(1,100,num=100))
y = torch.from_numpy(np.dot(2,x))
Run Code Online (Sandbox Code Playgroud)
我建立的模型如下:
class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.fc1 = nn.Linear(1,10)
self.fc2 = nn.Linear(10,20)
self.fc3 = nn.Linear(16,1)
def forward(self,inputs):
x = F.relu(self.fc1(inputs))
x = F.relu(self.fc2(x))
x = F.linear(self.fc3(x))
return x
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试训练时遇到了这个错误:
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x20 and 1x10)
Run Code Online (Sandbox Code Playgroud)
以下是完整代码供参考:
import numpy as np # linear algebra
import torch
from torch.utils.data import Dataset
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
x = torch.from_numpy(np.linspace(1,100,num=100))
y = …
Run Code Online (Sandbox Code Playgroud) 我在 pytorch 中实现软交叉熵损失时遇到一些问题。
我需要为我的模型实现加权软交叉熵损失,这意味着目标值也是概率向量,而不是热向量。
我尝试按照一些论坛中的建议使用 kldivloss,但它不需要权重向量,所以我无法使用它。
一般来说,我对如何使用 pytorch 创建自定义损失函数以及自动梯度如何遵循自定义损失函数有点困惑,特别是如果在模型之后我们应用一些非数学函数,例如映射模型的输出到某个向量并计算映射向量的损失等。
我正在尝试使用构建卷积神经网络pytorch
,但无法理解如何解释第一个密集连接层的输入神经元。举例来说,我有以下架构:
self.conv_layer = nn.Sequential(
nn.Conv2d(3, 32, 5),
nn.Conv2d(32, 64, 5),
nn.MaxPool2d(2, 2),
nn.Conv2d(64, 128, 5),
nn.Conv2d(128, 128, 5),
nn.MaxPool2d(2, 2))
self.fc_layer = nn.Sequential(
nn.Linear(X, 512),
nn.Linear(512, 128),
nn.Linear(128, 10))
Run Code Online (Sandbox Code Playgroud)
这X
是第一个线性层中的神经元数量。那么,我是否需要跟踪每一层输出张量的形状以便我可以弄清楚X
?
现在,我可以将值放入公式中(W - F + 2P) / S + 1
并计算每层之后的形状,这会有点方便。
难道没有更方便的东西可以自动执行此操作吗?
我有一个大小为 的 pytorch 张量torch.Size([4, 3, 2])
tensor([[[0.4003, 0.2742],
[0.9414, 0.1222],
[0.9624, 0.3063]],
[[0.9600, 0.5381],
[0.5758, 0.8458],
[0.6342, 0.5872]],
[[0.5891, 0.9453],
[0.8859, 0.6552],
[0.5120, 0.5384]],
[[0.3017, 0.9407],
[0.4887, 0.8097],
[0.9454, 0.6027]]])
Run Code Online (Sandbox Code Playgroud)
我想删除第二行,使张量变为torch.Size([3, 3, 2])
tensor([[[0.4003, 0.2742],
[0.9414, 0.1222],
[0.9624, 0.3063]],
[[0.5891, 0.9453],
[0.8859, 0.6552],
[0.5120, 0.5384]],
[[0.3017, 0.9407],
[0.4887, 0.8097],
[0.9454, 0.6027]]])
Run Code Online (Sandbox Code Playgroud)
如何删除 3D 张量的第 n 行?
我正在使用拥抱面部模型训练多标签分类问题。我正在使用 Pytorch Lightning 来训练模型。
这是代码:
当损失最后没有改善时,就会触发提前停止
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=2)
Run Code Online (Sandbox Code Playgroud)
我们可以开始训练过程:
checkpoint_callback = ModelCheckpoint(
dirpath="checkpoints",
filename="best-checkpoint",
save_top_k=1,
verbose=True,
monitor="val_loss",
mode="min"
)
trainer = pl.Trainer(
logger=logger,
callbacks=[early_stopping_callback],
max_epochs=N_EPOCHS,
checkpoint_callback=checkpoint_callback,
gpus=1,
progress_bar_refresh_rate=30
)
# checkpoint_callback=checkpoint_callback,
Run Code Online (Sandbox Code Playgroud)
一旦我运行这个,我就会得到这个错误:
~/.local/lib/python3.6/site-packages/pytorch_lightning/trainer/connectors/callback_connector.py in _configure_checkpoint_callbacks(self, checkpoint_callback)
75 if isinstance(checkpoint_callback, Callback):
76 error_msg += " Pass callback instances to the `callbacks` argument in the Trainer constructor instead."
---> 77 raise MisconfigurationException(error_msg)
78 if self._trainer_has_checkpoint_callbacks() and checkpoint_callback is False:
79 raise MisconfigurationException(
MisconfigurationException: Invalid type provided for checkpoint_callback: Expected bool …
Run Code Online (Sandbox Code Playgroud) 我编写了一个自定义的 pytorch Dataset
,该__getitem__()
函数返回一个 shape 的张量(250, 150)
,然后我用来DataLoader
生成一批批大小为 10 的数据。我的意图是拥有一个 shape 的批,(2500, 150)
作为这 10 个张量沿维度 0 的串联,但输出的DataLoader
已有形状(10, 250, 150)
。如何将 的输出转换为沿维度 0 串联的DataLoader
形状?(2500, 150)
我有一个 Python 包,其中包含大型 PyTorch 模型检查点。我尝试将那些包含在我的setup.py
as中
package_data = {'mypackage': ['model_weights/*', 'model_weights/sequential_models*']},
Run Code Online (Sandbox Code Playgroud)
现在的问题是,每当我尝试通过源安装时,pip install mypackage/ --no-cache-dir
我都会得到一个MemoryError
. 我尝试调试并--verbose
意识到这发生在
creating '/tmp/pip-wheel-bs29bp6a/tmpp0itbxn1/mypackage-1.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'mypackage/model_weights/distilled_model.pt'
adding 'mypackage-1.0.dist-info/RECORD'
Traceback (most recent call last):
...
File "/zhome/1d/8/153438/miniconda3/envs/testenv/lib/python3.9/zipfile.py", line 1127, in write
data = self._compressor.compress(data)
MemoryError
Building wheel for mypackage (PEP 517) ... error
ERROR: Failed building wheel for mypackage
Run Code Online (Sandbox Code Playgroud)
我真的只想安装将文件复制到model_weights/
安装目录中。将它们纳入车轮似乎是不可能的。
有没有办法在运行时抑制这一步pip install
?该包只会作为源分发,而不会在 PyPI 上分发,因为model_weights
文件太大了。
我使用 conda 注释来安装tensorflow:
conda create -n tf2.6 python=3.9
conda install tensorflow-gpu=2.6
Run Code Online (Sandbox Code Playgroud)
日志告诉我它已成功安装。然后在Python中,当我导入tensorflow时,它显示无法加载动态库“libcudart.so.11.0”。从日志中发现在安装tensorflow时安装了cudatoolkit和cudnn。在./tf2.6/lib目录下,libcudart.so
存在libcudart.so.11.0
. 为什么python无法识别呢?有人可以给一些建议。非常感谢。
在我的 conda 环境中,还有另一个版本 tf2.5。它可以完美地工作,但我忘记了如何安装它,因为我安装它的时间很长。
我使用下面的代码加载经过训练的自定义 Yolov5 模型并执行检测。
import cv2
import torch
from PIL import Image
model = torch.hub.load('ultralytics/yolov5', 'custom',
path='yolov5/runs/train/exp4/weights/best.pt', force_reload=True)
img = cv2.imread('example.jpeg')[:, :, ::-1] # OpenCV image (BGR to RGB)
results = model(img, size=416)
Run Code Online (Sandbox Code Playgroud)
#显示和保存我正在使用的结果:
results.print()
results.save()
results.show()
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将结果保存在不同的目录中,以便我可以在基于网络的应用程序中使用它们。我正在使用 Streamlit,供您参考。例如,目前,结果(图像)保存在运行\检测\exp*中。我想改变它。任何人都可以指导我吗?
如何使用单个优化器联合优化包含两个不同神经网络的模型参数?初始化优化器后,我尝试过以下内容:
optim_global = optim.Adam(zip(model1.parameters(), model2.parameters()))
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误
TypeError: optimizer can only optimize Tensors, but one of the params is tuple
Run Code Online (Sandbox Code Playgroud)