Python - точность сохраненной модели Tensorflow ниже, чем до сохранения - PullRequest
0 голосов
/ 12 апреля 2020

Я настроил свою сверточную нейронную сеть в тензорном потоке, обучил ее на наборе данных и оценил ее на невидимых данных. Делая это, я получил точность ~ 98% по невидимым данным.
Затем я использовал

model.save("path/to/model")

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

tf.keras.models.load_model("path/to/model")

, и сравнил ее с теми же данными, на которых я получил точность 98%, но на этот раз я получил ~ 96%. Это не такая большая разница, но я думаю, что это тоже не мало. Это нормально?
Я видел, что много раз в тензорном потоке экспортируются только веса, а не смещения, но я не знаю, что как-то связано с этим
Это моя модельная структура:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 26, 26, 64)        640       
_________________________________________________________________
activation (Activation)      (None, 26, 26, 64)        0         
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 64)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 11, 11, 64)        36928     
_________________________________________________________________
activation_1 (Activation)    (None, 11, 11, 64)        0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64)          0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 3, 3, 64)          36928     
_________________________________________________________________
activation_2 (Activation)    (None, 3, 3, 64)          0         
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 1, 1, 64)          0         
_________________________________________________________________
flatten (Flatten)            (None, 64)                0         
_________________________________________________________________
dense (Dense)                (None, 10)                650       
_________________________________________________________________
activation_3 (Activation)    (None, 10)                0         
=================================================================
Total params: 75,146
Trainable params: 75,146
Non-trainable params: 0
_________________________________________________________________
None

1 Ответ

0 голосов
/ 12 апреля 2020

Это зависит от того, есть ли у вас какие-либо случайные элементы, например, если вы перетасовываете свои тренировочные данные или случайным образом инициализируете свои веса с самого начала (что по умолчанию). В этом случае алгоритм найдет другой локальный минимум и, следовательно, даст разные результаты.

Если вы хотите всегда получать одинаковые результаты, введите данные тренировки в том же порядке и используйте tf.set_random_seed(0), что сделать ваши начальные веса всегда одинаковыми.

...