Итак, у меня есть два массива 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