Почему сообщается об ошибках размеров, хотя размеры на самом деле верныPython

Программы на Python
Ответить
Anonymous
 Почему сообщается об ошибках размеров, хотя размеры на самом деле верны

Сообщение Anonymous »

Я разделил модель и передал ее разным клиентам для обучения, а для передачи параметров использовал 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»