Anonymous
Почему сообщается об ошибках размеров, хотя размеры на самом деле верны
Сообщение
Anonymous » 18 дек 2024, 04:55
Я разделил модель и передал ее разным клиентам для обучения, а для передачи параметров использовал mpi4py. Ниже приведена ошибка, когда я запустил 3 процесса. Обратите внимание, что выходная форма на распечатке относится к выходному размеру предыдущего слоя, то есть входному размеру этого слоя.
Код: Выделить всё
Epoch: 0
inputs shape: torch.Size([102, 3, 32, 32]) targets shape: torch.Size([102])
Client 0 processing layer conv1
output shape: torch.Size([102, 3, 32, 32])
Client 0 processing layer bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.conv1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.bn2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.conv2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.conv1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.bn2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.conv2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer2.0.bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer2.0.conv1
output shape: torch.Size([102, 64, 32, 32])
inputs shape: torch.Size([102, 3, 32, 32]) targets shape: torch.Size([102])
Client 0 processing layer conv1
output shape: torch.Size([102, 3, 32, 32])
train_split: Client 1 received prev_output
Client 0 processing layer bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.conv1
output shape: torch.Size([102, 64, 32, 32])
Traceback (most recent call last):
File "/home/AI_blockchain/watermark-split/train.py", line 125, in
train_split(epoch, net, criterion, optimizer, logfile,
File "/home/AI_blockchain/watermark-split/trainer.py", line 132, in train_split
output = layer(output)
^^^^^^^^^^^^^
File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1532, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1541, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/conv.py", line 460, in forward
return self._conv_forward(input, self.weight, self.bias)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/conv.py", line 456, in _conv_forward
return F.conv2d(input, weight, bias, self.stride,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Given groups=1, weight of size [128, 64, 1, 1], expected input[102, 128, 16, 16] to have 64 channels, but got 128 channels instead
Client 0 processing layer layer1.0.bn2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.0.conv2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.conv1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.bn2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer1.1.conv2
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer2.0.bn1
output shape: torch.Size([102, 64, 32, 32])
Client 0 processing layer layer2.0.conv1
output shape: torch.Size([102, 64, 32, 32])
train_split: Client 2
Как видите, когда клиент 0 обрабатывает Layer1.0.conv1 в первый раз, ошибки нет, а когда клиент 0 обрабатывает Layer1.0.conv1 во второй раз время возникает ошибка RuntimeError: учитывая группы = 1, вес размера [128, 64, 1, 1], ожидалось, что вход [102, 128, 16, 16] будет иметь 64 канала, но получил Вместо этого 128 каналов. Но, как мы видим из размеров, напечатанных выше, входные размеры Layer1.0.conv1 — [102, 64, 32, 32], количество каналов — 64 вместо 128, как указано в сообщении об ошибке. Запустите команду печати train_split: Client 2, и она зависла.
Заранее спасибо за ответ!
Подробнее здесь:
https://stackoverflow.com/questions/792 ... ly-correct
1734486918
Anonymous
Я разделил модель и передал ее разным клиентам для обучения, а для передачи параметров использовал mpi4py. Ниже приведена ошибка, когда я запустил 3 процесса. Обратите внимание, что выходная форма на распечатке относится к выходному размеру предыдущего слоя, то есть входному размеру этого слоя. [code]Epoch: 0 inputs shape: torch.Size([102, 3, 32, 32]) targets shape: torch.Size([102]) Client 0 processing layer conv1 output shape: torch.Size([102, 3, 32, 32]) Client 0 processing layer bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.conv1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.bn2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.conv2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.conv1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.bn2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.conv2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer2.0.bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer2.0.conv1 output shape: torch.Size([102, 64, 32, 32]) inputs shape: torch.Size([102, 3, 32, 32]) targets shape: torch.Size([102]) Client 0 processing layer conv1 output shape: torch.Size([102, 3, 32, 32]) train_split: Client 1 received prev_output Client 0 processing layer bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.conv1 output shape: torch.Size([102, 64, 32, 32]) Traceback (most recent call last): File "/home/AI_blockchain/watermark-split/train.py", line 125, in train_split(epoch, net, criterion, optimizer, logfile, File "/home/AI_blockchain/watermark-split/trainer.py", line 132, in train_split output = layer(output) ^^^^^^^^^^^^^ File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1532, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1541, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/conv.py", line 460, in forward return self._conv_forward(input, self.weight, self.bias) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/anaconda3/envs/wmsplit/lib/python3.11/site-packages/torch/nn/modules/conv.py", line 456, in _conv_forward return F.conv2d(input, weight, bias, self.stride, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Given groups=1, weight of size [128, 64, 1, 1], expected input[102, 128, 16, 16] to have 64 channels, but got 128 channels instead Client 0 processing layer layer1.0.bn2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.0.conv2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.conv1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.bn2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer1.1.conv2 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer2.0.bn1 output shape: torch.Size([102, 64, 32, 32]) Client 0 processing layer layer2.0.conv1 output shape: torch.Size([102, 64, 32, 32]) train_split: Client 2 [/code] Как видите, когда клиент 0 обрабатывает Layer1.0.conv1 в первый раз, ошибки нет, а когда клиент 0 обрабатывает Layer1.0.conv1 во второй раз время возникает ошибка RuntimeError: учитывая группы = 1, вес размера [128, 64, 1, 1], ожидалось, что вход [102, 128, 16, 16] будет иметь 64 канала, но получил Вместо этого 128 каналов. Но, как мы видим из размеров, напечатанных выше, входные размеры Layer1.0.conv1 — [102, 64, 32, 32], количество каналов — 64 вместо 128, как указано в сообщении об ошибке. Запустите команду печати train_split: Client 2, и она зависла. Заранее спасибо за ответ! Подробнее здесь: [url]https://stackoverflow.com/questions/79289786/why-dimension-errors-are-reported-when-the-dimensions-are-actually-correct[/url]