RuntimeError:给定 groups=1,权重大小为 [32, 3, 16, 16, 16],预期输入 [100, 16, 16, 16, 3] 有 3 个通道,但得到了 16 个通道
这是我认为问题所在的代码部分。
def __init__(self):
super(Lightning_CNNModel, self).__init__()
self.conv_layer1 = self._conv_layer_set(3, 32)
self.conv_layer2 = self._conv_layer_set(32, 64)
self.fc1 = nn.Linear(2**3*64, 128)
self.fc2 = nn.Linear(128, 10) # num_classes = 10
self.relu = nn.LeakyReLU()
self.batch=nn.BatchNorm1d(128)
self.drop=nn.Dropout(p=0.15)
def _conv_layer_set(self, in_c, out_c):
conv_layer = nn.Sequential(
nn.Conv3d(in_c, out_c, kernel_size=(3, 3, 3), padding=0),
nn.LeakyReLU(),
nn.MaxPool3d((2, 2, 2)),
)
return conv_layer
def forward(self, x):
out = self.conv_layer1(x)
out = self.conv_layer2(out)
out = out.view(out.size(0), -1) …Run Code Online (Sandbox Code Playgroud) 当我使用 ddp 模式(2 个 GPU)在集群上启动主脚本时,Pytorch Lightning 会复制主脚本中执行的任何内容,例如打印或其他逻辑。我需要一些扩展的训练逻辑,我想自己处理。例如,在之后做某事(一次!)Trainer.fit()。但随着主脚本的重复,这并不能按我的预期工作。我也尝试将其包装在 中if __name__ == "__main__",但它不会改变行为。如何解决这个问题呢?或者,如何在 Trainer 对象周围使用一些逻辑,而无需重复?
这可能是一个非常简单的问题。我刚刚开始使用 PyTorch Lightning,不知道如何在训练后接收模型的输出。
我对 y_train 和 y_test 的预测感兴趣,作为某种数组(后续步骤中的 PyTorch 张量或 NumPy 数组),以使用不同的脚本在标签旁边绘制。
dataset = Dataset(train_tensor)
val_dataset = Dataset(val_tensor)
training_generator = torch.utils.data.DataLoader(dataset, **train_params)
val_generator = torch.utils.data.DataLoader(val_dataset, **val_params)
mynet = Net(feature_len)
trainer = pl.Trainer(gpus=0,max_epochs=max_epochs, logger=logger, progress_bar_refresh_rate=20, callbacks=[early_stop_callback], num_sanity_val_steps=0)
trainer.fit(mynet)
Run Code Online (Sandbox Code Playgroud)
在我的闪电模块中,我具有以下功能:
def __init__(self, random_inputs):
def forward(self, x):
def train_dataloader(self):
def val_dataloader(self):
def training_step(self, batch, batch_nb):
def training_epoch_end(self, outputs):
def validation_step(self, batch, batch_nb):
def validation_epoch_end(self, outputs):
def configure_optimizers(self):
Run Code Online (Sandbox Code Playgroud)
我是否需要特定的预测函数,或者是否有任何我看不到的已经实现的方法?
VS Code 的 Python 扩展最近发布了 TensorBoard 集成,但它似乎对我不起作用。
每当我从命令面板运行“Python:启动 TensorBoard”时,我都会看到 此屏幕。这是 TensorBoard 页面,其中显示默认消息“当前数据集没有活动的仪表板”。命令 plate 命令有两个日志目录选项,“使用当前工作目录”和“选择另一个文件夹”,但似乎都不起作用。
但是,当我使用终端命令正常运行 TensorBoard 时
tensorboard --logdir=...
Run Code Online (Sandbox Code Playgroud)
一切正常。这让我认为我的日志目录和张量板安装设置良好,问题出在 VS Code 或 Python 扩展上。
我应该提到我使用 PyTorch 和 PyTorch Lightning 生成日志,而不是 Tensorflow。(就上下文而言,我使用的是 macOS Big Sur)
有谁知道解决方法是什么?
python visual-studio-code tensorboard vscode-python pytorch-lightning
我想提取所有数据来绘制绘图,而不是使用张量板。我的理解是,自从张量板绘制线图以来,所有带有损失和准确性的日志都存储在定义的目录中。
%reload_ext tensorboard
%tensorboard --logdir lightning_logs/
Run Code Online (Sandbox Code Playgroud)
但是,我想知道如何从 pytorch Lightning 中的记录器中提取所有日志。接下来是训练部分的代码示例。
#model
ssl_classifier = SSLImageClassifier(lr=lr)
#train
logger = pl.loggers.TensorBoardLogger(name=f'ssl-{lr}-{num_epoch}', save_dir='lightning_logs')
trainer = pl.Trainer(progress_bar_refresh_rate=20,
gpus=1,
max_epochs = max_epoch,
logger = logger,
)
trainer.fit(ssl_classifier, train_loader, val_loader)
Run Code Online (Sandbox Code Playgroud)
我已经确认trainer.logger.log_dir返回的目录似乎保存日志并trainer.logger.log_metrics返回<bound method TensorBoardLogger.log_metrics of <pytorch_lightning.loggers.tensorboard.TensorBoardLogger object at 0x7efcb89a3e50>>。
trainer.logged_metrics仅返回最后一个纪元的日志,例如
{'epoch': 19,
'train_acc': tensor(1.),
'train_loss': tensor(0.1038),
'val_acc': 0.6499999761581421,
'val_loss': 1.2171183824539185}
Run Code Online (Sandbox Code Playgroud)
你知道如何解决这个情况吗?
我正在尝试执行一个Python文件,其中包含带有lightning和torchvision模块的pytorch。但是当我在 pi3 中下载并成功安装 pytorch 的 whl 文件后,我一次又一次地遇到同样的错误。错误是
ModuleNotFoundError: No module named 'pytorch_lightning.metrics'
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助,因为我被困了超过 3 天。我已经使用 pip 安装了模块。
我想知道使用 DDP 时记录指标的正确方法是什么。我注意到,如果我想在里面打印一些东西,validation_epoch_end当使用 2 个 GPU 时,它会被打印两次。我原本期望validation_epoch_end仅在 0 级上被调用并接收所有 GPU 的输出,但我不确定这是否正确。因此我有几个问题:
validation_epoch_end(self, outputs)- 使用DDP时,每个子进程是否接收当前GPU处理的数据或所有GPU处理的数据,即输入参数是否outputs包含来自所有GPU的整个验证集的输出?outputsGPU/进程特定,那么在使用 DDP 时计算整个验证集的任何指标的正确方法是什么validation_epoch_end?我知道我self.global_rank == 0只能在这种情况下通过检查和打印/记录来解决打印问题,但是我试图更深入地了解在这种情况下我正在打印/记录的内容。
这是我的用例中的代码片段。我希望能够报告整个验证数据集的 f1、精度和召回率,我想知道使用 DDP 时正确的做法是什么。
def _process_epoch_outputs(self,
outputs: List[Dict[str, Any]]
) -> Tuple[torch.Tensor, torch.Tensor]:
"""Creates and returns tensors containing all labels and predictions
Goes over the outputs accumulated from every batch, detaches the
necessary tensors and stacks them together.
Args:
outputs (List[Dict])
"""
all_labels = []
all_predictions = …Run Code Online (Sandbox Code Playgroud) 我想使用带有 bilstm 层的 RNN,并使用 pytorch 进行蛋白质嵌入。它适用于线性层,但当我使用 Bilstm 时,出现运行时错误。抱歉,如果不清楚,这是我的第一篇出版物,如果有人可以帮助我,我将不胜感激。
from collections import Counter, OrderedDict
from typing import Optional
import numpy as np
import pytorch_lightning as pl
import torch
import torch.nn.functional as F # noqa
from deepchain import log
from sklearn.model_selection import train_test_split
from sklearn.utils.class_weight import compute_class_weight
from torch import Tensor, nn
num_layers=2
hidden_size=256
from torch.utils.data import DataLoader, TensorDataset
def classification_dataloader_from_numpy(
x: np.ndarray, y: np.array, batch_size: int = 32
) -> DataLoader:
"""Build a dataloader from numpy for classification problem
This dataloader …Run Code Online (Sandbox Code Playgroud) 在 Jupyter Notebook 中训练 PyTorch Lightning 模型时,控制台日志输出很尴尬:
\nEpoch 0: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x89| 2315/2318 [02:05<00:00, 18.41it/s, loss=1.69, v_num=26, acc=0.562]\nValidating: 0it [00:00, ?it/s]\nValidating: 0%| | 0/1 [00:00<?, ?it/s]\nEpoch 0: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88| 2318/2318 [02:09<00:00, 17.84it/s, loss=1.72, v_num=26, acc=0.500, val_loss=1.570, val_acc=0.564]\nEpoch 1: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x89| 2315/2318 [02:04<00:00, 18.63it/s, loss=1.56, v_num=26, acc=0.594, val_loss=1.570, val_acc=0.564]\nValidating: 0it [00:00, ?it/s]\nValidating: 0%| | 0/1 [00:00<?, ?it/s]\nEpoch 1: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88| 2318/2318 [02:08<00:00, 18.07it/s, loss=1.59, v_num=26, acc=0.528, val_loss=1.490, val_acc=0.583]\nEpoch 2: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x89| 2315/2318 [02:01<00:00, 19.02it/s, loss=1.53, v_num=26, acc=0.617, val_loss=1.490, val_acc=0.583]\nValidating: 0it [00:00, ?it/s]\nValidating: 0%| | 0/1 [00:00<?, …Run Code Online (Sandbox Code Playgroud) 我通过 PyTorch 数据集使用 emnist 数据集以及需要 3 通道输入的神经网络。
我想使用 PyTorch 变换将 1D 灰度复制为 3D,这样我就可以对 1D 和 3D 数据使用相同的网络。
我可以使用哪种变换?或者我将如何按照此处的建议扩展 PyTorch 转换:/sf/answers/3537164641/