Две равные модели Keras после set / get_weights () не имеют одинаковые веса в соответствии с numpy .array_equal () - PullRequest
1 голос
/ 01 апреля 2020

Используя numpy.array_equal(), приведенный ниже код показывает, что даже после копирования весов с model_1 на model_2, он по-прежнему указывает на то, что оба веса различны, хотя, глядя на оба веса, они действительно равны друг друга. Почему?

import numpy as np
from keras.models import Sequential
from keras.layers import Dense

model_1 = Sequential([
  Dense(1, activation='relu', input_shape=(10,)),
])

model_2 = Sequential([
  Dense(1, activation='relu', input_shape=(10,)),
])

model_2.set_weights(model_1.get_weights())
print(model_1.get_weights())
print()
print(model_2.get_weights())
print()
print(np.array_equal(model_1.get_weights(), model_2.get_weights()))

Вывод, который я получаю:

[array([[-0.37920648],
       [-0.23108077],
       [ 0.43857104],
       [-0.58995485],
       [-0.7320645 ],
       [-0.65417486],
       [ 0.6509816 ],
       [-0.41319188],
       [ 0.54799384],
       [ 0.7301964 ]], dtype=float32), array([0.], dtype=float32)]

[array([[-0.37920648],
       [-0.23108077],
       [ 0.43857104],
       [-0.58995485],
       [-0.7320645 ],
       [-0.65417486],
       [ 0.6509816 ],
       [-0.41319188],
       [ 0.54799384],
       [ 0.7301964 ]], dtype=float32), array([0.], dtype=float32)]

False

Ожидаемый вывод: True

1 Ответ

2 голосов
/ 01 апреля 2020

get_weights() возвращает список numpy массивов.

Когда вы передаете списки numpy массивов в array_equal, каждый список внутренне преобразуется в массив numpy object dtype, который вы не можете просто проверить на равенство.

См. здесь для связанного вопроса и дальнейшего объяснения

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