【发布时间】:2021-10-09 22:24:25
【问题描述】:
我正在尝试将我的自动编码器模型(用于分类)保存到磁盘,但执行时出现以下错误:model.save(model_name)
NotImplementedError:Layer ModuleWrapper 在
__init__中有参数,因此必须覆盖get_config。
这是我的代码的一部分:
import numpy as np
import tensorflow as tf # TF 2.5.0
from tensorflow import keras
from tensorflow.keras.models import Sequential
from keras.layers import Dense
from tensorflow.keras import layers
from tensorflow.keras import regularizers
from tensorflow.keras.utils import to_categorical
import matplotlib.pyplot as plt
import pandas as pd
import sklearn
from sklearn.model_selection import train_test_split
from callbacks import all_callbacks
import os, time
print(train_data.shape, train_labels.shape, test_data.shape, test_labels.shape )
# Shape -> (3680, 1024, 1) (3680, 10) (920, 1024, 1) (920, 10)
act_func = 'relu'
out_func = 'softmax'
k_inic = 'glorot_uniform'
def create_model():
model = Sequential()
model.add(Dense(512,activation=act_func, kernel_initializer=k_inic))
model.add(Dense(100,activation=act_func, kernel_initializer=k_inic))
model.add(Dense(10, activation=out_func, kernel_initializer=k_inic))
opt = keras.optimizers.Adam()
model.compile(loss='mse', optimizer=opt, metrics=["accuracy"])
model.build(input_shape=(None, 1024))
return model
history = model.fit(train_data, train_labels, epochs = EPOCHS, batch_size = BATCH_SIZE, validation_split=VALIDATION_SPLIT, verbose = 0)
model = create_model()
res = model.evaluate(test_data, test_labels, batch_size = BATCH_SIZE, verbose = 0)[1]
model_name = "autoencoder_crwu"
model.save(model_name)
模型总结:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
module_wrapper_24 (ModuleWra (None, 512) 524800
_________________________________________________________________
module_wrapper_25 (ModuleWra (None, 100) 51300
_________________________________________________________________
module_wrapper_26 (ModuleWra (None, 10) 1010
=================================================================
Total params: 577,110
Trainable params: 577,110
模型有效,我得到的最佳精度是 93.8%,但我无法保存(我确实可以保存权重)。
我在这里读到我需要实现 get_config 但不知道如何为我的代码执行此操作,因为其他示例使用了我不理解的类或其他东西。有没有简单的方法来实现它?或任何资源来看看如何?
另外,为什么层被称为ModuleWrapper 而不是 Dense?
谢谢
【问题讨论】:
标签: python tensorflow machine-learning keras autoencoder