Почему метод keras.models.save_model() не сохраняет вес, когда модель определена в специальном классе keras.Model?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему метод keras.models.save_model() не сохраняет вес, когда модель определена в специальном классе keras.Model?

Сообщение Anonymous »

Я пытаюсь обучить, сохранить и загрузить обратно модель, определенную в пользовательском классе, унаследованном от keras.Model.
Определение и обучение работают нормально. Я сохраняю обученную модель в формате «.keras». Когда я загружаю модель обратно, архитектура сохраняется, но веса каждого слоя отсутствуют. Вот пример кода, воспроизводящий проблему:

Код: Выделить всё

import tensorflow as tf
import numpy as np

@tf.keras.utils.register_keras_serializable()
class dummyModel(tf.keras.Model):

def __init__(self, dense_size, **kwargs):

self.dense_size = dense_size
super().__init__(**kwargs)

def build(self):
self.layer1 = tf.keras.layers.Dense(self.dense_size)
self.layer2 = tf.keras.layers.Dense(self.dense_size)

def call(self, inputs):
x = self.layer1(inputs)
out = self.layer2(x)
return out

def get_config(self):
config = super().get_config()
config.update({
'dense_size': self.dense_size
})
return config

input = tf.random.normal((100,100,1))
output = tf.random.normal((100,100,1))

model = dummyModel(10)

model.compile(optimizer='adam', loss='mse')
model.fit(input, output, epochs=10, batch_size=10)

tf.keras.models.save_model(model, 'dummy.keras')

modelSaved = tf.keras.models.load_model('dummy.keras')

assert model.to_json() == modelSaved.to_json(), "Model architectures are different"

for layer1, layer2 in zip(model.layers, modelSaved.layers):
weights1 = layer1.get_weights()
weights2 = layer2.get_weights()
if weights1 != []:
assert weights2, f"{layer2.name} of loaded model has empty weight list"
for w1, w2 in zip(weights1, weights2):
assert np.array_equal(w1, w2), f"Weigths of {layer1.name} are different."

print("Models are identical (architecture and weigths).")
Код выдает следующую ошибку утверждения:

Код: Выделить всё

AssertionError                            Traceback (most recent call last)

 in ()
48     weights2 = layer2.get_weights()
49     if weights1 != []:
---> 50         assert weights2, f"{layer2.name} of loaded model has empty weight list"
51     for w1, w2 in zip(weights1, weights2):
52         assert np.array_equal(w1, w2), f"Weigths of {layer1.name} are different."

AssertionError: dense_2 of loaded model has empty weight list
Я пытался использовать модель keras.Sequential или Functional API, и веса сохраняются правильно. Если модель определена в пользовательском классе с помощью соответствующего метода get_config(), веса не сохраняются. Я относительно новичок в фреймворке keras, поэтому могу упустить здесь ключевую концепцию.
Вот ссылка для совместной работы с тем же кодом:
https: //colab.research.google.com/drive/1H47N77k5skn9CXp4ijx3sMhGy2EL5iAd#scrollTo=0xy_DDNNO2So

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-the-mode
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»