np.array_equal истинно поэлементно, но не полностью - PullRequest
0 голосов
/ 26 мая 2020

Итак, у меня есть два массива a и b, которые представляют веса из слоев двух отдельных, но предположительно одинаковых моделей. Если я это сделаю:

for i in range(len(a)):
    print(i, a[i].shape)
...
for i in range(len(b)):
    print(i, b[i].shape)

, я получу те же результаты, следовательно, они имеют точно такую ​​же форму. Учитывая это, я делаю:

 for i in range(len(a)):
    print(np.array_equal(a[i],b[i]))

Что возвращает True на каждой итерации, как и ожидалось. И еще:

np.array_equal(a,b)
False

Чем это объясняется?

Примечание: массивы состоят из миллионов элементов, поэтому я не могу их здесь разместить


Изменить : Требуется дополнительная информация. Я пробовал np.allcose(a,b), но он возвращает ошибку: TypeError: ufunc 'isfinite' not supported for the input types,.

Другая информация:

a.dtype
Out[31]: dtype('O')

for i in range(len(a)):
    print(a[i].dtype)

float32
..
float32
for i in range(len(a)):
    print(a[i].shape)

(8, 8, 4, 32)
(32,)
(4, 4, 32, 64)
(64,)
(3, 3, 64, 64)
(64,)
(3136, 512)
(512,)
(512, 7)
(7,)

Типичные значения, например. после ввода a на консоли:

array([[ 0.07951447, -0.05771456,  0.19115011, ...,  0.00221113,
        -0.07151963, -0.043664  ],
       [-0.12819108, -0.35420918, -0.2011751 , ..., -0.17197789,
        -0.3776419 ,  0.0248649 ],
       [ 0.14795731, -0.00116287, -0.11165092, ...,  0.05597401,
         0.10254459, -0.05197995],
       ...,
       [-0.02236149, -0.00130034,  0.08647525, ..., -0.05736822,
         0.0443062 ,  0.10795061],
       [-0.06922315, -0.16868076,  0.09703451, ...,  0.06901634,
         0.09876721,  0.0513133 ],
       [-0.02136025,  0.04748438,  0.1370429 , ..., -0.09078182,
        -0.08319436, -0.14710473]], dtype=float32),
       array([-0.25613004, -0.19301122, -0.23552935,  0.11345425, -0.23320739,
       -0.18501312,  0.13193467], dtype=float32)], dtype=object)

Все точно так же для b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...