Необоснованное(?) и непоследовательное округление при преобразовании массива numpy в тензор факела

#numpy #pytorch #rounding

Вопрос:

Преобразование numpy.массива с плавающей точкой в факел.тензор приводит к необоснованному (np_array1 округляется с пятой значащей цифрой) и непоследовательному (np_array2 округляется вверх, а np_array3 округляется вниз) округлению. Есть ли способ избежать этого?

Ввод:

 np_array1 = np.array([0.99995]) print(np_array1) print(torch.tensor(np_array1))  np_array2 = np.array([5.99995]) print(np_array2) print(torch.tensor(np_array2))  np_array3 = np.array([555555.99995]) print(np_array3) print(torch.tensor(np_array3))  

Выход:

 [0.99995] tensor([1.0000], dtype=torch.float64) [5.99995] tensor([6.0000], dtype=torch.float64) [555555.99995] tensor([555555.9999], dtype=torch.float64)  

Комментарии:

1. Я подозреваю, что в результате преобразования здесь нет фактической потери информации, но PyTorch просто выбирает отображение информации иначе, чем NumPy, то есть очевидная потеря точности является чисто артефактом отображения. Что произойдет, если вы преобразуете тензор обратно в массив NumPy? Вы получаете исходные значения обратно?

2. Вот и все! Не могли бы вы отправить свой комментарий в качестве ответа, чтобы я мог отметить вопрос как решенный?

3. Боюсь, у меня на самом деле нет большого опыта работы с PyTorch (я даже не могу убедить его правильно построить на моем текущем ноутбуке, поэтому приведенный выше комментарий был чистой догадкой); Я бы предпочел оставить ответ кому-то, кто знает PyTorch лучше. Этот человек может дать рекомендации о том, как, например, изменить настройки печати PyTorch. (Конечно, вы всегда можете написать ответ самостоятельно — вопросы с самостоятельным ответом на переполнение стека-это вещь, и они поощряются.)

4. Я вижу, я не был уверен, что здесь соблюдается этикет, так как я никогда раньше не писал. Спасибо вам за совет!