Tensorflow2.0 Keras之自定义网络

Tensorflow小技巧整理:tf.trainable_variables(), tf.all_variables(), tf.global_variables()的使用 在使用tensorflow搭建模型时,需要定义许多变量,例如一个映射层就需要权重与偏置。当网络结果越来越复杂,变量越来越多的时候,就需要一个查看管理变量的函数,在tensorflow中,tf.trainable_variables(), tf.all_variables(),和tf.global_variables()可以来满足查看变量的要求,来简单说一下他们的不同。 阅读详情

Tensorflow2.0 Keras之自定义网络


尽管 Keras 提供了很多的常用网络层类,但深度学习可以使用的网络层远远不止这些。科研工作者一般是自行实现了较为新颖的网络层,经过大量实验验证有效后,深度学习框架才会跟进,内置对这些网络层的支持。因此掌握自定义网络层、网络的实现非常重要。

对于需要创建自定义逻辑的网络层,可以通过自定义类来实现。在创建自定义网络层类时,需要继承自layers.Layer 基类;创建自定义的网络类时,需要继承自keras.Model 基类,这样建立的自定义类才能够方便的利用Layer/Model 基类提供的参数管理等功能,同时也能够与其他的标准网络层类交互使用。

自定义网络层

对于自定义的网络层,至少需要实现初始化__init__方法和前向传播逻辑call 方法。我们以某个具体的自定义网络层为例,假设需要一个没有偏置向量的全连接层,即bias 为0,同时固定激活函数为ReLU 函数。尽管这可以通过标准的Dense 层创建,但我们还是通过实现这个“特别的”网络层类来阐述如何实现自定义网络层。

首先创建类,并继承自Layer 基类。创建初始化方法,并调用母类的初始化函数,由于是全连接层,因此需要设置两个参数:输入特征的长度inp_dim 和输出特征的长度outp_dim,并通过self.add_variable(name, shape)创建shape 大小,名字为name 的张量𝑾,并设置为需要优化。代码如下:

class MyDense(layers.Layer):
	# 自定义网络层
	def __init__(self, inp_dim, outp_dim):
		super(MyDense, self).__init__()
		# 创建权值张量并添加到类管理列表中,设置为需要优化
		self.kernel = self.add_variable('w', [inp_dim, outp_dim],
		trainable=True)

需要注意的是,self.add_variable 会返回张量𝑾的Python 引用,而变量名name 由TensorFlow 内部维护,使用的比较少。我们实例化MyDense 类,并查看其参数列表,例如:

In [5]: net = MyDense(4,3) # 创建输入为4,输出为3 节点的自定义层
net.variables,net.trainable_variables # 查看自定义层的参数列表
Out[5]:
# 类的全部参数列表
([<tf.Variable 'w:0' shape=(4, 3) dtype=float32, numpy=…
# 类的待优化参数列表
[<tf.Variable 'w:0' shape=(4, 3) dtype=float32, numpy=…

可以看到𝑾张量被自动纳入类的参数列表。
通过修改为self.kernel = self.add_variable(‘w’, [inp_dim, outp_dim], trainable=False),我们可以设置𝑾张量不需要被优化,此时再来观测张量的管理状态:

([<tf.Variable 'w:0' shape=(4, 3) dtype=float32, numpy=…], # 类的全部参数列表
[])# 类的不需要优化参数列表

可以看到,此时张量并不会被trainable_variables 管理。此外,类初始化中创建为tf.Variable类型的类成员变量也会自动纳入张量管理中,例如:

	# 通过tf.Variable 创建的类成员也会自动加入类参数列表
	self.kernel = tf.Variable(tf.random.normal([inp_dim, outp_dim]),
							  trainable=False)

打印出管理的张量列表如下:

# 类的参数列表
([<tf.Variable 'Variable:0' shape=(4, 3) dtype=float32, numpy=…],
[])# 类的不需要优化参数列表

完成自定义类的初始化工作后,我们来设计自定义类的前向运算逻辑,对于这个例
子,只需要完成𝑶 = 𝑿@𝑾矩阵运算,并通过固定的ReLU 激活函数即可,代码如下:

    def call(self, inputs, training=None):
        # X@W
        out = inputs @ self.kernel
        # 执行激活函数运算
        out = tf.nn.relu(out)
        return out

如上所示,自定义类的前向运算逻辑实现在call(inputs, training=None)函数中,其中inputs代表输入,由用户在调用时传入;training 参数用于指定模型的状态:training 为True 时执行训练模式,training 为False 时执行测试模式,默认参数为None,即测试模式。由于全连接层的训练模式和测试模式逻辑一致,此处不需要额外处理。对于部份测试模式和训练模式不一致的网络层,需要根据training 参数来设计需要执行的逻辑。

自定义网络

在完成了自定义的全连接层类实现之后,我们基于上述的“无偏置的全连接层”来实现MNIST 手写数字图片模型的创建。
自定义网络类可以和其他标准类一样,通过Sequential 容器方便地封装成一个网络模型:

network = Sequential([MyDense(784, 256), # 使用自定义的层
					MyDense(256, 128),
					MyDense(128, 64),
					MyDense(64, 32),
					MyDense(32, 10)])
network.build(input_shape=(None, 28*28))
network.summary()

可以看到,通过堆叠我们的自定义网络层类,一样可以实现5 层的全连接层网络,每层全连接层无偏置张量,同时激活函数固定地使用ReLU 函数。

Sequential 容器适合于数据按序从第一层传播到第二层,再从第二层传播到第三层,以此规律传播的网络模型。对于复杂的网络结构,例如第三层的输入不仅是第二层的输出,还有第一层的输出,此时使用自定义网络更加灵活。下面我们来创建自定义网络类,首先创建类,并继承自Model 基类,分别创建对应的网络层对象,代码如下:

class MyModel(keras.Model):
	# 自定义网络类,继承自Model 基类
	def __init__(self):
		super(MyModel, self).__init__()
		# 完成网络内需要的网络层的创建工作
		self.fc1 = MyDense(28*28, 256)
		self.fc2 = MyDense(256, 128)
		self.fc3 = MyDense(128, 64)
		self.fc4 = MyDense(64, 32)
		self.fc5 = MyDense(32, 10)

然后实现自定义网络的前向运算逻辑,代码如下:

	def call(self, inputs, training=None):
		# 自定义前向运算逻辑
		x = self.fc1(inputs)
		x = self.fc2(x)
		x = self.fc3(x)
		x = self.fc4(x)
		x = self.fc5(x)
		return x

这个例子可以直接使用第一种方式,即Sequential 容器包裹实现。但自定义网络的前向计算逻辑可以自由定义,更为通用

自定义网络的实战在我的另一篇博客当中有进行讲解,有兴趣的去看一看吧
https://blog.youkuaiyun.com/python_LC_nohtyp/article/details/104123126

tensorflow2.0 Keras自定义层与网络 tensorflow2.0 Keras自定义层与网络    使用keras通常的写法都是先调Sequential类(仅用于层的线性堆叠),如: nn = Sequential([layers.Dense(128,activation='relu), layers.Dense(64,activation='relu), layers.Dens... 阅读详情

相关推荐

〖TensorFlow2.0笔记14〗感知机梯度详细过程,Keras高层API,Keras的自定义网络!

Keras高层API! 文章目录一、Keras高层API-11.1、五大功能1.2、这里主要讲解Metrics1.3、1.2中的实战 一、Keras高层API-1 1.1、五大功能 1.2、这里主要讲解Metrics 1.3、1.2中的实战 import tensorflow as tf from tensorflow.keras import datasets, layers, opt...

AI新视界 2320

Tensorflow构建网络的四种方法

tensorflow框架建立神经网络模型的四种方法。

m0_62945162的博客 713

tensorflow定义自己的网络模型

tensorflow定义自己的网络模型,以MNIST数据集为例,实现网络的定义和训练

【Tensorflow入门实践】第5-1节:简单的神经网络

如题。主要是了解一些神经网络的基础知识。

the Blog of 等不到天亮丶等时光 590

tensorflow之自定义神经网络层实例

今天小编就为大家分享一篇tensorflow之自定义神经网络层实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

机器学习(ML)在材料领域应用

机器学习作为一种兼顾开发效率以及开发成本的方法,已经逐渐应用于材料发现、结构分析、性质预测、反向设计等多个领域,并且在材料学研究中展现出惊人的潜力。传统的发现新材料的方法,如经验试错法和基于密度泛函理论(DFT)的方法,往往需要较长的研发周期,成本高、效率低,已经不能很好的适应如今需求量激增的材料学领域 ...

W5632DE的博客 3719

【TensorFlow2.0】自定义网络层、自定义网络、内置预训练模型、测量工具

一、自定义网络   网络层:   (1)常用网络层:keras提供了非常多的常用网络层类,用tf.keras.layers.xxx()实现,但深度学习可以使用的网络层远远不止这些。   (2)自定义网络层:需要创建自定义网络层类,这个类继承自tf.keras.layers.Layer基类;   网络(模型):   (1)通常网络构建:利用tf.keras.Sequential()网络容器,将网路层...

qq_36926037的博客 3779

大语言模型在建筑规范自动化合规审查中的微调策略与规模效应实践

大语言模型(LLM)通过在海量文本数据上预训练,具备了强大的语言理解和生成能力。其核心原理是基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。在工程实践中,为了将这种通用能力适配到建筑、法律、金融等高度专业化的垂直领域,通常需要采用领域微调技术。微调通过使用特定领域的高质量指令数据对模型参数进行更新,使其掌握专业术语、逻辑规则和任务范式,从而解决通用模型在专业场景下知识匮乏和“幻觉”问题。结合检索增强生成(RAG)技术,将动态外部知识库作为模型的“参考手册”,能进一步提升事实准确性并降低幻

weixin_30667831的博客 364

TensorFlow2 手把手教你实现自定义层

TensorFlow2 手把手教你实现自定义层.

我是小白呀的博客 7781

基于RTL8370N的8口千兆无管理交换机硬件设计

无管理交换机是局域网边缘接入的核心基础设备,其本质是通过硬件状态机实现MAC地址学习、线速转发与自动协商,无需软件配置即可完成即插即用组网。原理上依赖高度集成的PHY+交换矩阵单芯片(如RTL8370N),结合确定性硬件逻辑替代MCU固件,保障低延迟、高可靠与零运维。技术价值体现在成本压缩、体积精简与部署极简化,广泛应用于家庭网络扩展、工业现场设备联网及嵌入式系统桥接等场景。本文详解一款基于RTL8370N的紧凑型8端口千兆无管理交换机,覆盖芯片选型依据、PHY接口设计、电源与散热优化等关键工程实践。

weixin_42327217的博客 402

端到端自动驾驶的精准测试场景开发

1. 背景介绍 自动驾驶技术的发展正在改变交通运输的未来,然而,要实现安全可靠的自动驾驶,需要进行大量的测试和验证。端到端自动驾驶系统的测试场景开发是实现这一目标的关键。本文将详细介绍端到端自动驾驶的精准测试场景开发,包括核心概念、算法原理、数学模型、项目实践,以及未来发展趋势。 2. 核心概念与联系

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1319

Tensorflow2.0:使用Keras自定义网络实战

tensorflow2.0建议使用tf.keras作为构建神经网络的高级API 背景介绍: 2012年 AlexNet 在 ImageNet 上显著的降低了分类错误率,深度神经网络进入迅速发展阶段。在2014年牛津大学机器人实验室尝试构建了更深的网络,文章中称为"VERY DEEP CONVOLUTIONAL NETWORKS",如VGG16,有16层,虽然现在看起来稀疏平常,但与 AlexN...

陶陶name 2594

基于上下文的 Listwise 重排模型(一):miRNN

2018年阿里团队提出的miRNN(Mutual Influence aware RNN)模型,首次将电商搜索重排建模为全局优化问题,通过RNN捕捉商品序列的相互影响,结合Beam Search生成最优排序,在淘宝搜索中实现GMV(商品交易总额)提升5%的突破。本文将结合论文细节与通俗案例,拆解这一工业级重排框架的核心逻辑。

进一步有进一步的欢喜~ 1918

tensorflow2.0之Keras自定义网络

tensorflow之Keras自定义网络

shengxing_stu的博客 226

Transformer实战(38)——视觉Transformer (Vision Transformer, ViT)

Transformer 在自然语言处理 (NLP) 领域取得了显著成就,在许多不同的任务中都表现出色。在本节中,我们将探索视觉 Transformer (Vision Transformer, ViT) 模型。正如 NLP 领域创建了多种模型一样,视觉领域也开发了多种模型,每种模型都为计算机视觉提供了新的视角。通过本节,将学习如何使用 ViT 等模型进行计算机视觉任务,了解基于 Transformer 的预训练计算机视觉模型的工作原理,以及如何针对特定任务进行微调。

盼小辉丶的博客 2894

从 SAP GUI 走向 SAP Fiori:一套面向 SAP S/4HANA 的用户迁移实战方法论

SAP S/4HANA转型中,用户从SAP GUI迁移到Fiori的难点在于业务价值的重构而非简单的界面替换。Fiori的核心价值在于角色化、实时洞察和智能决策,而非完全替代GUI。成功迁移需分阶段推进:先展示关键角色的价值,建立统一入口,再逐步提高Fiori占比。让用户参与设计比后期培训更重要,需通过具体场景(如采购优先级管理)展示效率提升。迁移策略应平衡新旧界面优势,让Fiori成为业务价值触达的主要方式,而非强制替换。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 236

tensorflow 2.0 keras 高层接口 之 自定义层网络

7.2 自定义网络Outlinekeras.SequentialLayer/Model完整代码 Outline keras.Sequential Keras.layers.Layer Keras.Model 注: 要想使用 Sequential 必须遵循一些协议。 自定的层继承至 Keras.layers.Layer 类。 自己的模型也必须要继承至 Keras.Model 类 。 k...

记录求学阶段的技术学习、项目实践与成长思考。 2155

Backtrader Web:开源量化交易全栈平台

Backtrader Web是一个基于Backtrader框架的现代化量化交易全栈平台,将专业回测引擎与Web技术结合,提供从策略开发到实盘交易的完整解决方案。平台采用FastAPI+Vue3技术栈,具有118个内置策略模板、专业可视化分析工具和完整的策略生命周期管理功能。支持策略版本控制、参数优化、模拟/实盘交易及监控告警,通过RESTful API和WebSocket实现前后端交互。系统采用模块化设计,包含策略服务、回测服务等核心模块,支持SQLite/PostgreSQL等多种数据库。安装简单,5分钟

云金杞 646

Tensorflow2.0: tf.Keras之自定义残差网络

残差网络结构如下图所示。 和指定以全连接网络一样,需要定义__init__,build,call函数: https://mp.csdn.net/console/editor/html/107713858 这里的输出out引用了上一步的conv结果:out = relu(conv)+conv def call(self, input_tensor): conv = tf.nn.conv2d(input_tensor, self.weight, strides=[1, 2, 2,

weixin_42253874的博客 1433

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[Tensorflow2.0 keras]初始化(自定义)网络层参数

一、背景 二、初始化网络层参数 三、参考 [1]Layer weight initializers [2]keras系列(一):参数设置 []

刘好念的博客 4501

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TensorFlow2.0教程-用keras构建自己的网络层

Tensorflow教程-用keras构建自己的网络层 1.构建一个简单的网络层 from __future__ import absolute_import, division, print_function import tensorflow as tf tf.keras.backend.clear_session() import tensorflow.keras as keras imp...

知行_那片天 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TensorFlow 2.0 + Keras实战:用自定义层和回调函数打造你的第一个神经网络模型

本文详细介绍了如何使用TensorFlow 2.0和Keras构建自定义神经网络层和回调函数,实现高效的深度学习模型开发。通过实战案例,展示了自定义层设计、混合精度训练、回调系统应用以及模型部署的全流程,帮助开发者提升AI工程化能力。特别适合需要掌握CNN等深度学习技术的开发者。

weixin_30216561的博客 530

astype函数_TensorFlow2.0教程-keras 函数api

TensorFlow2.0教程-keras 函数api最全Tensorflow 2.0 入门教程持续更新:Doit:最全Tensorflow 2.0 入门教程持续更新​zhuanlan.zhihu.com 完整tensorflow2.0教程代码请看https://github.com/czy36mengfei/tensorflow2_tutorials_chinese (欢迎star)本教程主要由...

weixin_39982580的博客 349

lightgbm 保存模型 过大_小白学PyTorch | 18 TF2构建自定义模型

【机器学习炼丹术】的学习笔记分享<>扩展之Tensorflow2.0| 17 TFrec文件的创建与读取扩展之Tensorflow2.0| 16 TF2读取图片的方法扩展之Tensorflow2.0| 15 TF2实现一个简单的服装分类任务小白学PyTorch | 14 tensorboardX可视化教程小白学PyTorch | 13 EfficientNet详解及Py...

weixin_28771631的博客 239

TensorFlow2.0教程-keras 函数api

TensorFlow2.0教程-keras 函数api 完整tensorflow2.0教程代码请看tensorflow2,0:中文教程tensorflow2_tutorials_chinese(欢迎star) # !pip install pydot #!sudo apt-get install graphvizf from __future__ import absolute_import, ...

知行_那片天 1万+
上一篇: Tensorflo2.0 Keras高级接口之模型的保存和加载
下一篇: Tensorflow2.0之卷积层实现
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值