Определение и обучение работают нормально. Я сохраняю обученную модель в формате «.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
Вот ссылка на Colab с тем же кодом:
https://colab.research.google.com/drive ... y_DDNNO2So
Подробнее здесь: https://stackoverflow.com/questions/790 ... n-the-mode