tensorflow2.0 | 自定义Model

记录一下自定义keras模型的过程中遇到的坑。

1、自定义模型

自定义模型,要继承keras.Model,然后实现__init__和call两个方法,注意以下坑点:
__init__若没有定义layers,那么在后面应用梯度时会找不到trainable_variables;因此所有层的定义一定要在__init__里定义。

import tensroflow.keras as keras

class model(keras.Model):

    def __init__(self):
        super(VAE, self).__init__()
        self.dense1 = keras.layers.Dense(16, activation=tf.nn.relu)
        self.dense2 = keras.layers.Dense(8, activation=tf.nn.relu)
        self.dense3 = keras.layers.Dense(1)

    def call(self, inputs, training=None, mask=None):
        h = self.dense1(inputs)
        h = self.dense2(h)
        return self.dense3(h)
2、训练自定义模型
model = model()
model.build(input_shape=(None, 1))
model.summary()  # 必须在build之后
train_op = keras.optimizers.Adam(...)
model.compile(...)
model.fit(...)
3、保存自定义模型

注意保存模型时的坑:
subclass Model 是不能直接save的,但是能够save_weights,或者save_format=“tf”。按如下可以正确保存:

model.save_weights("model_weights.h5")
4、加载保存好的模型

加载模型后,要使用模型必需先调用build指定input_shape,不然模型无法确定输入数据的维度,从而无法创建对应的weight矩阵。

model = model()
model.build(input_shape=(None, 1))
model.summary()  # 必须在build之后
model.load_weights("model_weights.h5")  # 必须在build之后
# 加载模型权重后,可以继续训练,也可以做预测
y = model.predict(x)
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值