Tensorflow2.0之卷积层实现

tensorflow2.0 Keras VGG16 VGG19 系列 代码实现 模型介绍参看:博文 VGG16 迁移模型 先看看标准答案 import tensorflow as tf from tensorflow import keras base_model = keras.applications.VGG16(weights='imagenet') base_model.summary() 自建模型 import tensorflow as tf from tensorflow import keras from tensorflow.keras 阅读详情

Tensorflow2.0之卷积层实现

自定义权值

在 TensorFlow 中,通过tf.nn.conv2d 函数可以方便地实现2D 卷积运算。tf.nn.conv2d基于输入𝑿: ℎ 𝑤 𝑐𝑖𝑛 和卷积核𝑾: 𝑘 𝑘 𝑐𝑖𝑛 𝑐𝑜𝑢𝑡 进行卷积运算,得到输出𝑶 ℎ′ 𝑤′ 𝑐𝑜𝑢𝑡 ,其中𝑐𝑖𝑛表示输入通道数,𝑐𝑜𝑢𝑡表示卷积核的数量,也是输出特征图的通道数。例如:

In [1]:
x = tf.random.normal([2,5,5,3]) # 模拟输入,3 通道,高宽为5
# 需要根据[k,k,cin,cout]格式创建W 张量,4 个3x3 大小卷积核
w = tf.random.normal([3,3,3,4])
# 步长为1, padding 为0,
out = tf.nn.conv2d(x,w,strides=1,padding=[[0,0],[0,0],[0,0],[0,0]])
Out[1]: # 输出张量的shape
TensorShape([2, 3, 3, 4])

其中padding 参数的设置格式为:
padding=[[0,0],[上,下],[左,右],[0,0]]
例如,上下左右各填充一个单位,则padding 参数设置为 ,实现如下:

In [2]:
x = tf.random.normal([2,5,5,3]) # 模拟输入,3 通道,高宽为5
# 需要根据[k,k,cin,cout]格式创建,4 个3x3 大小卷积核
w = tf.random.normal([3,3,3,4])
# 步长为1, padding 为1,
out = tf.nn.conv2d(x,w,strides=1,padding=[[0,0],[1,1],[1,1],[0,0]])
Out[2]: # 输出张量的shape
TensorShape([2, 5, 5, 4])

特别地,通过设置参数padding=‘SAME’、strides=1 可以直接得到输入、输出同大小的卷积层,其中padding 的具体数量由TensorFlow 自动计算并完成填充操作。例如:

In [3]:
x = tf.random.normal([2,5,5,3]) # 模拟输入,3 通道,高宽为5
w = tf.random.normal([3,3,3,4]) # 4 个3x3 大小的卷积核
# 步长为,padding 设置为输出、输入同大小
# 需要注意的是, padding=same 只有在strides=1 时才是同大小
out = tf.nn.conv2d(x,w,strides=1,padding='SAME')
Out[3]: TensorShape([2, 5, 5, 4])

当𝑠trides >1 时,设置padding='SAME’将使得输出高、宽将成 1 s \frac{1}{s} s1​倍地减少(s为步长)。例如:

In [4]:
x = tf.random.normal([2,5,5,3])
w = tf.random.normal([3,3,3,4])
# 高宽先padding 成可以整除3 的最小整数6,然后6 按3 倍减少,得到2x2
out = tf.nn.conv2d(x,w,strides=3,padding='SAME')
Out [4]:TensorShape([2, 2, 2, 4])

卷积神经网络层与全连接层一样,可以设置网络带偏置向量。tf.nn.conv2d 函数是没有实现偏置向量计算的,添加偏置只需要手动累加偏置张量即可。例如

# 根据[cout]格式创建偏置向量
b = tf.zeros([4])
# 在卷积输出上叠加偏置向量,它会自动broadcasting 为[b,h',w',cout]
out = out + b

不知道broadcasting机制的可以去看我的另一篇博客。
https://blog.youkuaiyun.com/python_LC_nohtyp/article/details/104097417
通过设置strides和padding可以控制卷积层的输出大小,卷积层并不像全连接层一样可以直接指定输出层的大小。

Keras高层接口卷积层类

通过卷积层类layers.Conv2D 可以不需要手动定义卷积核𝑾和偏置𝒃张量,直接调用类实例即可完成卷积层的前向计算,实现更加高层和快捷。

在新建卷积层类时,只需要指定卷积核数量参数filters,卷积核大小kernel_size,步长strides,填充padding 等即可。如下创建了4 个3 × 3大小的卷积核的卷积层,步长为1,padding 方案为’SAME’:
layer = layers.Conv2D(4,kernel_size=3,strides=1,padding=‘SAME’)
如果卷积核高宽不等,步长行列方向不等,此时需要将kernel_size 参数设计为tuple格式(𝑘ℎ 𝑘𝑤),strides 参数设计为(𝑠ℎ 𝑠𝑤)。如下创建4 个3 × 大小的卷积核,竖直方向移动步长𝑠ℎ = 2,水平方向移动步长𝑠𝑤 = :

layer = layers.Conv2D(4,kernel_size=(3,4),strides=(2,1),padding=‘SAME’)

创建完成后,通过调用实例(的__call__方法)即可完成前向计算,例如:

In [5]:
# 创建卷积层类
layer = layers.Conv2D(4,kernel_size=3,strides=1,padding='SAME')
out = layer(x) # 前向计算
out.shape # 输出张量的shape
Out[5]:TensorShape([2, 5, 5, 4])

在类Conv2D综合,保存了卷积核张量W和偏置b,可以通过类成员trainable_variables直接返回W和b的列表,例如:

In [6]:
# 返回所有待优化张量列表
layer.trainable_variables
Out[6]:
[<tf.Variable 'conv2d/kernel:0' shape=(3, 3, 3, 4) dtype=float32, numpy=
array([[[[ 0.13485974, -0.22861657, 0.01000655, 0.11988598],
[ 0.12811887, 0.20501086, -0.29820845, -0.19579397],
[ 0.00858489, -0.24469738, -0.08591779, -0.27885547]], …
<tf.Variable 'conv2d/bias:0' shape=(4,) dtype=float32, numpy=array([0., 0.,
0., 0.], dtype=float32)>]

通过调用layer.trainable_variables可以返回Conv2D类维护的W和b张量,这个类成员在获取网络层的待优化变量时非常有用。也可以直接调用类实力layer.kernel、layer.bias名访问W和b张量

textCNN 文本分类系列-tf2.0 keras实现(一) 写在前面:今天开始总结一下文本分类任务中常见的神经网络模型。 第一站textCNN 文本分类任务 文本分类任务是自然语言处理(NLP)中很重要的子任务,比如文本情感分类,对于一段话,比如评价,判断是积极的还是消极的。 在此我们用卷积神经网络来解决这个问题。 卷积神经网络 卷积神经网络最初是在14年左右应用到图像处理领域中的,由于卷积神经网络具有平移不变性和参数共享特点,有强大的特征提取能力(表征学... 阅读详情

相关推荐

从零开始:用TensorFlow 2.0和NumPy手搓一个CNN,理解卷积背后的数学

本文详细介绍了如何使用TensorFlow 2.0和NumPy从零开始构建卷积神经网络(CNN),深入解析卷积操作的数学原理和实现细节。通过基础NumPy实现和TensorFlow自定义层开发,帮助读者掌握CNN的核心机制,包括卷积核特性、池化操作及反向传播实现,为深度学习实践打下坚实基础。

weixin_30216561的博客 1199

tensorflow2.0 --- Conv2D

tf.keras.layers.Conv2D 是一个2维卷积层 “”"2D convolution layer (e.g. spatial convolution over images). This layer creates a convolution kernel that is convolved with the layer input to produce a tensor of ou...

奋斗 3346

tensorflow2.0实现图卷积神经网络(GCN)理解与 代码实现 附完整代码

tensorflow2.0实现图卷积神经网络(GCN)理解与 代码实现 附完整代码

机器学习深度学习业余选手 1844

【TensorFlow2.0】高级API中关于tf.keras.layers.Conv2D()函数的参数详细说明(建议保存)

文章目录参数说明:1.位置参数`filters`2.位置参数`kernel_size`3. 关键字参数`strides=(1, 1)`,滑动步长4. 关键字参数`padding = 'valid'`,默认是边缘不填充5. 关键字参数 `data_format = 'channels_first'`,输入的数据格式6. 关键字参数`dalition_rate = (1,1)`,这个含义是,卷积核的膨胀系数7. 关键字参数activation = “relu”,此处的含义是激活函数8. 关键字参数use_bia

量化Mike 2584

MTK平台 MT6789 烧录 efuse 3.0 Configuration SOP

=====================生成cert1和cert2 key===============================================生成efuse key相关文件===========================================签名DA==========================================================正常编译。=====================Security3.0 的SOP 说明。

a785722173的博客 2333

构建面向嵌入式Linux的ARM64交叉编译工具链:从sysroot配置到CMake实战

本文详细介绍了如何构建面向嵌入式Linux的ARM64交叉编译工具链,从sysroot配置到CMake实战。通过分步指导,帮助开发者解决架构不一致问题,提升编译效率,特别适用于树莓派等ARM64设备开发。文章涵盖sysroot机制、环境搭建、CMake配置及常见问题解决方案,是嵌入式开发的实用指南。

weixin_42537142的博客 200

TF-卷积函数 tf.nn.conv2d 介绍

转自http://www.cnblogs.com/welhzh/p/6607581.html 下面是这位博主自己的翻译加上测试心得 tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, filter, strides, paddi...

518

一键转换B站M4S缓存为MP4:无需FFMPEG命令的简易工具

本文介绍了一款专为B站用户设计的绿色工具,可将缓存的M4S视频和音频文件一键转换为通用MP4格式。该工具完全图形化操作,无需学习复杂的FFmpeg命令,解决了普通用户处理B站缓存视频的痛点。文章详细讲解了从下载、配置到转换的完整流程,并提供了常见问题排查与安全使用建议,帮助用户高效、安全地管理离线视频内容。

joy55的博客 480

Tensorflow2——卷积神经网络的搭建

Tensorflow2卷积神经网络的搭建卷积神经网络Fasion_minst识别卷积神经网络搭建代码 卷积神经网络 1、卷积神经网络 CNN最大的特点就是在于卷积的权值共享,利用空间结构减少学习的参数量,防止过拟合的同时减少计算量。在卷积神经网络中,第一个卷积层直接接受图像像素级的输入,卷积之后传给后面的网络,每一层的卷积操作相当于滤波器,对图像进行特征提取,原则上可保证尺度,平移和旋转不变性。 一般的卷积网络包含一下操作: (1)卷积。图像通过不同卷积核卷积并且加偏置(bias),提取局部特征,每一个卷积

weixin_45392405的博客 2407

一分钟理解 “熔断“, “限流“ 与 “降级“

熔断,本质是一种“故障隔离”机制,用于当某个依赖服务出现持续故障(如响应超时、错误率飙升)时,暂时切断对该服务的调用,避免故障扩散到整个系统,防止“雪崩效应”;待依赖服务恢复正常后,再逐步恢复调用。其核心逻辑参考了现实中的“电路保险丝”——电路过载时,保险丝熔断,切断电路,保护电器不被烧毁;故障排除后,更换保险丝,电路恢复正常。闭合状态(Closed):正常状态,请求可以正常调用依赖服务,同时监控调用的错误率、超时率等指标。打开状态(Open)

h a 6 6 6 c k 为 你解决复杂难题! 1481

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 493

用Tensorflow2搭建经典的卷积神经网络(LeNet,AlexNet,VGG16,ResNet50)

最近看了卷积神经网络的一些经典论文,用Tensorflow2进行了复现,其中包括LeNet,AlexNet,VGG16,ResNet50,并且在数据集上进行了测试,能够正常训练,结果表明搭建的没有问题。 下面进入正题: import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import numpy as np import matplotlib.pyplot as plt %matpl

QianLong_的博客 1638

【逐函数讲解ORB_SLAM3源码】获取普通帧率、关键帧、IMU数据

获得imu的旋转 mRwc * mImuCalib.mTcb.rotationMatrix(); Sophus::SE3 mTwc 创建ORB_SLAM3系统 Create SLAM system. It initializes all system threads and gets ready to process frames. ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_RGBD, true, 0, file_nam

小秋 AI SLAM 入门实战教程 1245

TensorFlow2.0 卷积层实现

一、自定义权值 tf.nn.conv2d基于输入X: [batch_size,高,宽,通道数] 和卷积核W: [卷积核大小,卷积核大小,输入通道数,卷积核数量] 进行卷积运算,得到输出 O [batch_size,新的高,新的宽,卷积核数量] import tensorflow as tf x = tf.random.normal([2,5,5,3]) # 模拟输入,3 通道,高宽为5 ...

蕾姆的博客 4285

为什么一个“时间片”能折腾 Linux 十年?

时间片扩展不是抢占调度器的控制权,也不是提升优先级。在“非常短暂、非常确定”的用户态临界区内,避免线程被不必要地抢占。用户态自旋锁(user-space spinlock)无系统调用的极短临界区高并发、低延迟的数据结构操作RSEQ(Restartable Sequences)保护区间一旦线程在临界区被抢占,系统整体性能反而下降。线程 A 拿着一个用户态锁线程 B 被调度上来,开始自旋等这个锁但 A 因为时间片用完,被调度器切走CPU 白白空转,所有线程都在浪费时间。

网络技术联盟站 255

RuyiDify如何创建知识库API密钥:让程序安全访问知识库

知识库 API Key 是程序访问知识库的钥匙。创建它很简单,但真正重要的是知道它能做什么、应该放在哪里、不能暴露给谁。RuyiDify 讲这一步,不是为了让大家多记一个按钮,而是为了把知识库从“人工上传资料”推进到“程序化维护资料”。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 137

Tensorflow2.6.0实现VGG16卷积层特征图可视化

1.参考博文: 这里非常感谢这位博主,让我对特征可视化有了进一步的了解: https://blog.csdn.net/Forrest97/article/details/105895087 2.实验效果: 3.结果分析: 通过我画出来的一部分图,可以看出,随着卷积层数的加深,特征图越来越特化,像这张图片,更多的是提取图片中狗的眼睛和鼻子;而浅层更多的是提取图像的边缘和轮廓。所以随着网络的加深,图像的特征越来越特化,同时越来越难理解。 4.代码实现: import os import matplotl

Keep_Trying_Go的博客 3389

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Tensorflow2.0+实现Densnet神经网络

tensorflow2.0, 用minst数据集测试 直接上代码: import tensorflow as tf from tensorflow.keras import datasets, layers, models class DenseNet(object): '''初始化DenseNet con1size 第一层卷积核大小 densenet标准设计是7x...

1241

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TensorFlow2.0入门1-2 卷积神经网络进行手写字分类并可视化隐藏层

目录卷积神经网络进行手写字分类并进行可视化简单的卷积神经网络的使用进行卷积层池化层可视化 卷积神经网络进行手写字分类并进行可视化 内容总结自吴恩达TensorFlow2.0的课程 简单的卷积神经网络的使用 我们使用的数据集还是之前的mnist数据集。 import tensorflow as tf %matplotlib inline print(tf.__version__) # 加载数据集 m...

weixin_43398590的博客 953

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【TensorFlow2.0】如何搭建网络模型?

大家好,这是专栏《TensorFlow2.0》的第四篇文章,讲述网络模型的搭建。我们知道在不考虑输入层的情况下,一个典型的卷积神经网络通常由若干个卷积层、激活层、池化层及...

hacker_long的专栏 1598

从零开始:用TensorFlow 2.0和NumPy手搓一个CNN,彻底搞懂卷积在干什么

本文详细介绍了如何从零开始使用TensorFlow 2.0和NumPy手搓一个卷积神经网络(CNN),深入解析卷积运算的本质。通过数学基础、NumPy实现和TensorFlow 2.0的自动微分机制,帮助读者彻底理解卷积在计算机视觉中的作用及其优化技巧。

weixin_30443813的博客 492

tensorflow2.0卷积神经网络实战笔记

卷积神经网络 本文参考《TensorFlow2深度学习》 背景知识 1、深度学习的深度是指网络的层数较深,一般有5层以上。1~4层神经网络称为浅层神经网络。浅层神经网络不能很好的提取数据的高层特征,表达能力一般,很快被1990年代新提出的支持向量机(SVM)所超越。2006年,Hinton大佬提出了一种逐层预训练的算法,可以有效的初始化DBN网络,从而使得训练大规模、深层数(上百万的参数量)的神经网络成为可能。深度学习的概念被首次提出。深度学习和神经网络本质上指代基本一致,深度学习更侧重于深层次的神经网络的

weixin_44877390的博客 1470

经典卷积模型回顾31—利用DarkNet53实现图像分类(Tensorflow2.0)

以下是基于TensorFlow 2.0实现DarkNet53模型进行图像分类的示例代码。使用CIFAR-10数据集进行实验。

爱分享数据的一个人的博客 486

从零开始:用TensorFlow 2.0和NumPy手搓一个CNN,搞懂卷积到底在算啥

本文详细介绍了如何使用TensorFlow 2.0和NumPy从零开始构建一个卷积神经网络(CNN),深入解析卷积运算的核心原理。通过手工实现卷积层、池化层等关键组件,并结合可视化演示,帮助读者彻底理解CNN的工作机制。文章还涵盖了现代CNN的进阶知识和工业级实现技巧,适合深度学习初学者和希望深入理解CNN底层原理的开发者。

weixin_30536513的博客 485

AlexNet8网络在python下TensorFlow2的实现

参考资料: 北京大学, 软微学院, 曹健老师, 《人工智能实践:TensorFlow2.0笔记》 运行环境: python3.7 tensorflow 2.1.0 numpy 1.17.4 matplotlib 3.2.1 import tensorflow as tf import os import numpy as np from matplotlib import pyplot as plt from tensorflow.keras.layers import Conv2D, BatchNorma

m0_38022672的博客 346

实践篇1:深度学习之----LetNet之tensorflow2的实现

深度学习之----LetNet之tensorflow2的实现

xp_fangfei的博客 443
上一篇: Tensorflow2.0 Keras之自定义网络
下一篇: Tensorflow2.0 之Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED问题
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值