#python #pytorch #torch
#python #pytorch #факел
Вопрос:
Я пытаюсь создать файл трассировки. Связанная часть кода здесь:
def center_crop(self, layer, target_size):
_, _, layer_height, layer_width = layer.size()
diff_y = (layer_height - target_size[0]) // 2
diff_x = (layer_width - target_size[1]) // 2
return layer[:, :, diff_y:(diff_y target_size[0]), diff_x:(diff_x target_size[1])]
def forward(self, x, bridge):
up = self.up(x)
crop1 = self.center_crop(bridge, up.shape[2:])
out = torch.cat([up, crop1], 1)
out = self.conv_block(out)
В этой строке выдается предупреждение:
return layer[:, :, diff_y:(diff_y target_size[0]), diff_x:(diff_x target_size[1])]
Затем я загрузил этот файл трассировки на C и сделал прогноз для тестового изображения. Затем я сравнил результат с выводом в python. Я заметил, что результаты сильно отличаются. Я предполагаю, что причина кроется в этом предупреждении.
Комментарии:
1. Вы правы:
layer.size()
имеет типtorch.Size
(который будет отслеживаться правильно), но его деструктурирование_, _, layer_height, layer_width
приводит к тому, что эти переменные становятся обычными pythonint
s, которые не отслеживаются, и, таким образом, строка индексации работает так, как если бы индексы были постоянными. Это приведет к ошибкам в C , если ваш ввод приведет к тому, что эти переменные будут принимать другие значения, чем при создании трассировки. Теперь, в чем ваш вопрос?2. @Jatentaki Я изменил эти строки:
diff_y = (layer_height - target_size[0]) // 2 diff_x = (layer_width - target_size[1]) // 2
intodiff_y = (layer.size()[2] - target_size[0]) // 2 diff_x = (layer.size()[3] - target_size[1]) // 2
Он по-прежнему выдает предупреждение в той же строке3. Потому
layer.size()[i]
что также преобразуется в обычныйint
. В чем ваш вопрос? Вы пытаетесь заставить этот код работать на c ?4. @Jatentaki Позвольте мне объяснить. Я пытаюсь сегментировать объекты, используя архитектуру Unet. Я получил хорошие результаты в Python. Я хотел бы сделать то же предсказание на C . Поэтому я создал файл трассировки. Я написал код на C для проверки изображения путем загрузки этого файла трассировки. Однако это дало другой результат.