tensorflow入门 自定义模型

前面说了自定义的层,接下来自定义模型,我们以下图为例子

这个模型没啥意义,单纯是为了写代码实现这个模型

首先呢,我们看有几个部分,dense不需要我们实现了,我们就实现Res,为了实现那个*3,我们注意这个res可能需要多个res堆叠。

python 复制代码
class ResBlock(keras.layers.Layer):
    def __init__(self, n_layers, n_neurons, **kwargs):
        super().__init__(**kwargs)
        self.hidden =[keras.layers.Dense(n_neurons,activation='elu',kernel_initializer='he_normal')
                          for _ in range(n_layers)
                      ]
    def call(self, inputs):
        Z = inputs
        for layer in self.hidden:
            Z = layer(Z)
        return inputs + Z

这样我们就能实现一个可以循环的Res了,call是必须的,因为在计算的时候需要它

如果我们写得再详细一点,可能要加入built,如果需要保存和加载模型,我们需要get_congit和save_congit,总之,基本的样子就是如此。

为了防止搞错,解释以下为什么没有使用built,是为了偷懒。

下面我们构建模型的时候,会指定输入的维度,其实再通用的情况下,我们根本不知道输入的维度,built会自动推断输入维度,所有本来应该写个built的,但是睡觉时间到了。

然后我们基于上面的自定义层,实现左边的模型

python 复制代码
def ResModel(keras.Model):
    def __init__(self, out, **kwargs):
        super().__init__(*kwargs)
        self.hidden1 = keras,layers,Dense(30, activation='elu', kernel_initializer='he_normal')
        self.block1 = ResBlock(2,10)
        self.block2 = ResBlock(2,20)
        self.out = keras,layers,Dense(out)
    
    def call(self, inputs):
        Z = self.hidden1(inputs)
        for _ in range(4):
            Z = self.block1(Z)
        Z = self.block2(Z)
        return self.out(Z)

我觉得在此以及无需多言了。睡觉睡觉。

相关推荐
秋氘渔15 小时前
迭代器和生成器的区别与联系
python·迭代器·生成器·可迭代对象
Gu_shiwww15 小时前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
只说证事15 小时前
2025年数字公共治理专业重点学什么内容?(详细指南)
人工智能
LeeZhao@15 小时前
【AI推理部署】Docker篇04—Docker自动构建镜像
人工智能·docker·容器
程思扬15 小时前
利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
网络·人工智能·经验分享·docker·信息可视化·容器·架构
南方者15 小时前
它的 AI Agent 凭什么能擦出火花?!
人工智能·ai编程
心动啊12115 小时前
深度神经网络1——梯度问题+标签数不够问题
人工智能·神经网络·dnn
南方者15 小时前
基于Amazon Bedrock Agent 的两个服务示例的完整流程与详细内容,包含技术架构、实现细节、交互逻辑及扩展能力
人工智能·ai编程·敏捷开发
小王爱学人工智能15 小时前
OpenCV一些进阶操作
人工智能·opencv·计算机视觉
新智元15 小时前
起猛了!这个国家任命 AI 为「部长」:全球首个,手握实权,招标 100% 透明
人工智能·openai