tensorflow实现深度可分离卷积

深度可分离卷积在TensorFlow中的高效实现与优化 卷积神经网络(CNN)作为计算机视觉的核心架构,其计算效率直接影响模型部署效果。深度可分离卷积通过解耦空间和通道维度的计算,大幅降低了传统卷积的计算复杂度。该技术将标准卷积分解为深度卷积和逐点卷积两个步骤,在MobileNet等轻量级网络中展现出显著优势。以TensorFlow实现为例,3x3深度卷积配合1x1逐点卷积,可使计算量减少为传统卷积的1/9。这种优化特别适合移动端和嵌入式设备等资源受限场景,在保持模型精度的同时实现高效推理。通过合理使用批归一化、ReLU6激活函数和通道重排策略,开发者可以构建出 阅读详情
  • 数据库:MNIST,与这里对比
  • tf.nn.depthwise_conv2d的理解看这里,主要是对卷积核参数的理解,即(高度,宽度,输入通道,每个通道得到的输出通道数)
  • 训练速度慢,收敛也慢,刚开始就像没训练的样子,只将一个卷积层改成深度可分离卷积就增加了12次迭代
  • 20211213:将第一个卷积层改成深度可分离卷积后,训练始终不收敛。所以改成下列代码,多训练了16次,模型减小了6.85%。使用sp_conv也会不收敛,可能是batch_normalization的原因
  • 20211214:破案了,是relu的锅,注释以后,多训练了28次,看网上说好像要减小学习率
import tensorflow as tf
import numpy as np
import random
import cv2,sys,os
import MyData

def sp_conv(name, data, kernel_size, input_num, output_num, padding, data_format='NHWC'):
    with tf.variable_scope(name):
        weight = tf.get_variable(name='weight', dtype=tf.float32, trainable=True, shape=[kernel_size,kernel_size,input_num,1], initializer=tf.random_normal_initializer(stddev=0.01))
        conv = tf.nn.depthwise_conv2d(data, weight, [1,1,1,1], padding, data_format=data_format)
        conv = tf.layers.batch_normalization(conv, momentum=0.9)
        #conv = tf.nn.leaky_relu(conv, alpha=0.1)
        point_weight = tf.get_variable(name='point_weight', dtype=tf.float32, trainable=True, shape=[1,1,input_num,output_num], initializer=tf.random_normal_initializer(stddev=0.01))
        conv = tf.nn.conv2d(conv, point_weight, [1,1,1,1], padding, data_format=data_format)
        conv = tf.layers.batch_normalization(conv, momentum=0.9)
        #conv = tf.nn.leaky_relu(conv, alpha=0.1)
        return conv

data=tf.placeholder(tf.float32, [None, 28, 28, 3],name='data')
label=tf.placeholder(tf.float32, [None, 10], name='label')

with tf.variable_scope('conv1'): # output is 28x28
    weight = tf.get_variable(name='weight', dtype=tf.float32, trainable=True, shape=[5,5,1,6], initializer=tf.random_normal_initializer(stddev=0.01))
    conv1 = tf.nn.conv2d(data, weight, [1,1,1,1], 'SAME')
    bias = tf.get_variable(name='bias', shape=6, trainable=True, dtype=tf.float32, initializer=tf.constant_initializer(0.0))
    conv1 = tf.nn.bias_add(conv1, bias)
with tf.variable_scope('pool1'):
    pool1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')
with tf.variable_scope('conv2'): # output is 10x10
    weight2 = tf.get_variable(name='weight', dtype=tf.float32, trainable=True, shape=[5,5,6,1], initializer=tf.random_normal_initializer(stddev=0.01))
    conv2 = tf.nn.depthwise_conv2d(pool1, weight2, [1,1,1,1], 'VALID')
    point_weight2 = tf.get_variable(name='point_weight', dtype=tf.float32, trainable=True, shape=[1,1,6,16], initializer=tf.random_normal_initializer(stddev=0.01))
    conv2 = tf.nn.conv2d(conv2, point_weight2, [1,1,1,1], 'VALID')
    bias2 = tf.get_variable(name='bias', shape=16, trainable=True, dtype=tf.float32, initializer=tf.constant_initializer(0.0))
    conv2 = tf.nn.bias_add(conv2, bias2)
with tf.variable_scope('pool2'):
    pool2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')
with tf.variable_scope('dense1'):
    flat = tf.reshape(pool2, [-1, 5*5*16])
    dense1 = tf.layers.dense(inputs=flat, units=80, activation=tf.nn.relu, use_bias=True)
with tf.variable_scope('dense2'):
    dense2 = tf.layers.dense(inputs=dense1, units=10, activation=None, use_bias=True)
y = tf.nn.softmax(dense2)
# loss
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=label, logits=dense2)
loss=tf.reduce_sum(cross_entropy)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_step = tf.train.GradientDescentOptimizer(1e-4).minimize(loss)
# accuracy
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(label, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    
config = tf.ConfigProto() 
config.gpu_options.allow_growth = True
config.gpu_options.per_process_gpu_memory_fraction = 0.1
sess = tf.Session(config=config)
sess.run(tf.global_variables_initializer())
input_data = MyData.Dataset('/home/lwd/data/mnist/train.txt', True, 32)
test_data = MyData.Dataset('/home/lwd/data/mnist/test.txt', False, 32)
saver = tf.train.Saver()
summary_writer = tf.summary.FileWriter('./log/', sess.graph)

for i in range(100000):
    total = 0
    cnt = 0
    tl = 0
    for item in input_data:
        _, acc, lo = sess.run([train_step, accuracy, loss], feed_dict={data:item[0], label:item[1]})
        total += acc
        cnt += 1.0
        tl += lo
    print(i, total/cnt, tl / cnt)
    if total/cnt > 0.88:
        saver.save(sess, './checkpoint/mb')
        xh = 0
        acc = 0
        for item in test_data:
            yy = sess.run(y, feed_dict={data:item[0]})
            for k in range(yy.shape[0]):
                if(np.argmax(yy[k]) == np.argmax(item[1][k])) : acc += 1
                xh += 1
        print(acc * 1.0 / xh)
        sys.exit(0)
深入理解TensorFlow实现DeepMind WaveNet模型 自回归模型通过构建一个线性模型来描述变量之间的依赖关系。对于时间序列数据,第t个时刻的观测值被假设为前几个时刻观测值的线性组合加上一个误差项。该模型的一般形式可表示为:其中,X_t表示在t时刻的观测值,c是常数项,φ_i表示模型参数,ε_t是误差项,通常假设为白噪声。模型的阶数决定了前面多少个时刻的数据被用来预测当前数据。自回归模型的几个关键特性:记忆性:模型通过历史数据进行预测,因此具有一定的记忆能力。线性预测:预测过程基于线性函数,这使得模型易于求解和分析。 阅读详情

相关推荐

Python在TensorFlow中实现MobileNet模型:入门与实战

TensorFlow是由Google开发的一个开源机器学习框架,它广泛应用于研究和生产中,用于构建和部署大规模的机器学习模型。MobileNet模型是专为移动和嵌入式设备设计的轻量级深度学习模型,其主要用途在于提高移动设备上的图像识别和处理效率,同时降低对计算资源的要求。MobileNet模型之所以能在计算资源受限的环境下表现出色,得益于其采用的深度可分离卷积技术。

weixin_42576467的博客 1217

tensorflow复现深度可分离卷积

当涉及到深度可分离卷积的复现时,TensorFlow提供了一些内置的函数和层,使得任务更加容易。函数来创建深度可分离卷积层。这个函数接受类似于标准卷积层的参数,并将其应用于输入数据。我们还使用了批标准化层(你可以根据需要修改模型的层数、卷积核大小、激活函数等,以适应特定的任务和数据集。最后,我们添加了全连接层和输出层来完成模型的构建。)来进行规范化,并使用最大池化层(在上述代码中,我们使用了。

“365天深度学习训练营”报名进行中~ 530

TensorFlow2.0(十)–实现深度可分离卷积神经网络

深度可分离卷积神经网络1. 深度可分离卷积网络介绍1. 1 深度可分离卷积网络与普通卷积网络1.2 普通卷积与深度可分离卷积计算量对比2. 深度可分离卷积网络实现2.1 导入相应的库2.2 数据集的加载与处理2.3 构建模型2.4 2.4 模型的编译与训练2.5 学习曲线绘制2.6 模型验证 1. 深度可分离卷积网络介绍 1. 1 深度可分离卷积网络与普通卷积网络 深度可分离卷积神经网络是卷积神经网络的一个变种,可以对卷积神经网络进行替代。对于普通的卷积申请网络,如下图左边部分所示,由卷积层,批归一化操作与激活函数构成的。对于深度可分离卷积网络,它是由一个3×3深度可分离的卷积层,批归一化,

TensorFlow2.0(十)--实现深度可分离卷积神经网络

深度可分离卷积神经网络1. 深度可分离卷积网络介绍1. 1 深度可分离卷积网络与普通卷积网络1.2 普通卷积与深度可分离卷积计算量对比2. 深度可分离卷积网络实现2.1 导入相应的库2.2 数据集的加载与处理2.3 构建模型2.4 2.4 模型的编译与训练2.5 学习曲线绘制2.6 模型验证 1. 深度可分离卷积网络介绍 1. 1 深度可分离卷积网络与普通卷积网络 深度可分离卷积神经网络是卷积神...

魔法师の屋子★↓☆ 6895

“基于车载车机 ADB 的安卓自动化测试”以及“类似智谱 AutoGLM 的 AI 安卓自动化项目”的整理和选型建议。

本文系统梳理了安卓自动化测试两大路线。传统ADB框架中,**Appium**适用于企业级测试,**AndroidViewClient**和**Airtest**适合脚本化与图像识别场景。AI驱动的方案里,**智谱Open-AutoGLM**擅长中文场景的视觉理解与操作,**DroidRun**支持多模型与跨平台,而**Android-MCP**则适合将安卓能力作为工具集成到现有AI平台。选型需根据稳定性、技术栈与AI集成需求决定。

weixin_39072720的博客 900

开源大模型推理GPU资源评估以及优化

随着大模型的火热很多项目中都使用到了开源大模型,这时候准确评估大模型的GPU资源非常重要,主要有下面几个方面:GPU是昂贵的资源。高估内存需求可能导致在硬件上的不必要支出,而低估则可能导致系统故障或性能下降。:适当的内存管理确保模型高效运行,能够更快地响应用户并处理更多并发请求。:随着需求的增长,理解内存需求对于在不牺牲性能或产生高昂成本的情况下扩展服务至关重要。尽管其重要性显而易见,但计算用于服务大型语言模型(LLM)的GPU内存并不简单。

优快云DN的博客 3116

tensorflow2------深度可分离卷积的实现

深度可分离卷积(Depthwise separable convolution)是

Stay Hungry Stay Foolish 2743

相机光学(三十八)——VCM(Voice Coil Motor)音圈马达

VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。

图像学习之旅 7223

从零基础入门Tensorflow2.0 ----六、28 深度可分离卷积神经网络

every blog every motto: 0. 前言 深度可分离卷积神经网络实战 1. 代码部分 1. 导入模块 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline import numpy as np import sklearn import pandas as pd import os ...

胡侃有料的博客 399

(三) Debian 安装linuxcnc-ethercat中间件

1.在这里同样的也是需要下载一下依赖包 sudo apt install linuxcnc-uspace-dev 2.依赖包安装完成, 接着执行下面命令 sudo git clone https://github.com/sittner/linuxcnc-ethercat 还是可能出现下载网络错误下载不成功,可以直接下载我已上传百度云linuxcnc目录下 注意一下,后面make可能会出现头文件(xxx.h)的报错提示,在这里给大家一个处理办法 用aptitude 工具可以搞定 sudo apt-get

qq_30065813的博客 828

ValueError:Using a `device_map`, `tp_plan`, `torch.device` context manager or setting `torch.set解决方案

本文主要介绍了ValueError:Using a `device_map`, `tp_plan`, `torch.device` context manager or setting 'torch.set_default_device(device)` requires `accelerate`解决方案,希望能对使用transformers的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 3万+

Tensorflow2.0学习(15):深度可分离卷积

深度可分离卷积 参考文章. 通过轻微的损失换取参数量的减少。 实战 模型的构建:将Conv2D改为SeparableConv2D # tf.keras.models.Sequential() 构建模型 # 构建深度神经网络 model = keras.models.Sequential() # 添加卷积层 # filter:卷积核的个数, kernel_size:卷积核的尺寸, padd...

一枚小白的博客 1616

ros入门(八)---TF坐标转换

TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换。

weixin_51157015的博客 3388

TensorFlow实现深度可分离卷积

1、tf.nn.depthwise_conv2d(input,filter,strides,padding,rate=None,name=None,data_format=None):深度可分离卷积   参数:     input: 指需要做卷积的输入图像,要求是一个4维Tensor,具有[batch, height, width, in_channels]这样的shape,具体含义是[训练时...

蓬莱道人的博客 8837

uniapp(全端兼容) - 最新实现全局设置修改字体大小功能,统一修改全部页面所有文字的大小(标准/小/中/大字号切换,用户修改后整个项目立即生效)设置应用字体的大小(详细示例代码,一键复制开箱即用

uni-app,支付宝微信小程序,h5,手机端H5网页,移动端网站,安卓app,ios苹果app,nvue,全局设置字体大小,退出后还能记录字号大小,uniApp将全部页面的字体字号进行修改,uniapp设置改变全局字体大小功能,动态调整应用字体大小,详细教程,动态显示字体大小,可调整显示字体大小,如何解决不同端字体大小的问题,除了rem还有什么方法,设置全局字体大小,用户设置字号大小,应用字体大中小,实现用户全局设置应用字体大小,老年模式字体设置思路,h5端不行怎么办,移动端不生效,修改全局字号,一键改整

✅ 精选推荐文章 8885

Ego Planner规划算法(上)——Ego Planner流程介绍

本系列文章用于学习记录Ego-Planner规划算法的相关内容,本系列文章是在在Fast Planner规划算法系列文章的基础上,展开对Ego Planner的相关介绍,主要包括Ego Planner算法流程和程序框架两部分,主要学习资料是深蓝学院的移动机器人运动规划课程

慕羽★的博客 1万+

深度可分离卷积实战:MobileNetV2模型压缩技巧与TensorFlow实现

本文深入探讨了深度可分离卷积(Depthwise Separable Convolution)在MobileNetV2模型中的应用,详细解析了其原理、架构及TensorFlow实现方法。通过量化、剪枝等压缩技术,显著降低模型计算量和参数量,适合移动端和嵌入式设备部署。文章还提供了性能优化建议和实际应用案例,帮助开发者高效实现轻量级AI模型。

lemon的博客 367

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

深入浅出谈谈深度可分离卷积及 tensorflow 实现

1 简介 深度可分离卷积的核心思想就是将普通N个通道为M的卷积拆分成1个通道为M的卷积(这个卷积进行单通道滤波操作,区别于普通卷积滤波后通道相加)和N个1×1×M的卷积,其作用在于减少运行的参数量。如果采用 3 × 3 的卷积,那么采用深度可分离卷积后,参数将变成原来的1/8~1/9。 2 原理 2.1 普通卷积 对于普通卷积而言,一个边长为Dk,通道为M的卷积核(N个卷积),处理一个输入矩阵(通道为M),得到一个宽为Dw...

U R MINE 1808

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?+深度可分离卷积详解

注意:depthwise_conv2d 与普通的卷积有些不同。普通的卷积对卷积核每一个out_channel 的两个通道分别和输入的两个通道做卷积相加,得到 feature map 的一个channel, # 而 depthwise_conv2d 卷积对每一个对应的 in_channel,分别卷积生成两个out_channel,所以获得的 feature map 的通道数量可以用 in_channel * channel_multiplier 来表达,这个 channel_multiplier , 就可以.

Drug discovery 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度可分离卷积原理与TensorFlow实现详解

卷积神经网络(CNN)作为计算机视觉的核心架构,其计算效率直接影响模型部署效果。深度可分离卷积通过将标准卷积分解为深度卷积和逐点卷积两个步骤,在保持特征提取能力的同时大幅降低计算复杂度。这种结构特别适合移动端AI应用,能有效解决模型参数量大、推理速度慢等工程难题。以TensorFlow实现为例,通过组合DepthwiseConv2D和1×1卷积层,配合批归一化等技巧,可以在ImageNet分类等任务中实现75%以上的参数量压缩。该技术已广泛应用于MobileNet、EfficientNet等轻量级架构,成为

weixin_42509507的博客 290

tensorflow2.0学习笔记:深度可分离卷积

深度可分离卷积本质上是一种分支网络结构,分支网络结构有以下好处: a.可提供不同的视野域 b.提升效率 深度可分离卷积使用通道分支,能够减少参数提高计算效率,但同时也会造成梯度损失。深度可分离卷积由于其训练参数小的特点可以在手机上实现。 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline import numpy as np import sklearn import pandas as pd impor.

凿井而饮的博客 497

从MobileNet到实际项目:深度可分离卷积在PyTorch/TensorFlow中的实现与调参避坑指南

本文深入探讨深度可分离卷积(Depthwise Separable Convolution)在PyTorch和TensorFlow中的实现与调参技巧,结合MobileNet等实际项目案例,展示其在模型轻量化中的显著优势。通过对比双框架实现、分析调参陷阱及工业级部署优化策略,为开发者提供实用的避坑指南和性能提升方案。

weixin_42530793的博客 210

MobileNetV1 之 Depthwise separable convolution(深度可分离卷积)

MobileNetsV1 之 Depthwise separable convolution(深度可分离卷积)。

San_Zhang123的博客 1069

【神经网络】(11) 轻量化网络MobileNetV1代码复现、解析,附Tensorflow完整代码

各位同学好,今天和大家分享一下如何使用 Tensorflow 复现轻量化神经网络模型 MobileNetV1。为了能将神经网络模型用于移动端(手机)和终端(安防监控、无人驾驶)的实时计算,通常这些设备计算能力有限,因此我们需要减少模型参数量、减小计算量、更少的内存访问量、更少的能耗。 下图通过比较GPU和CPU上前向传播的耗时分布,可见,卷积层占用大部分时间。并且 Batch Size 越大,卷积层花费的时间就越长。由于全连接层在目前的许多网络中都不存在了。所以,轻量化网络很大程度上是对卷积层的优化.

博观而约取,厚积而薄发 5066

Keras(二十)深度可分离卷积网络实战

本文将介绍: 什么是深度可分离卷积网络 实现深度可分离卷积网络实战代码 一,什么是深度可分离卷积网络 1,常规的卷及操作 常规的卷及操作如上图所示:参数量共计3 x 3 x 3 x 4 = 108. 2,深度可分离卷积 depthwise convolution pointwise convolution 1)depthwise convolution 常规卷积,卷积核是作用于所有的depth方向的. depthwise conv对不同channel用不同的卷积核做卷积 参数量共计参数共计3

TFATS的博客 2537

【TensorFlow2.0实战】基于TnesorFlow实现MobileNet V1

【TensorFlow2.0实战】简单的分类模型 目录 了解 MobileNet V1网络结构 基于TensorFlow实现MobileNet V1 基于 CIFAR-10数据训练网络 使用训练好的模型进行预测 了解 MobileNet V1网络结构 轻量级卷积神经网络 更少的参数、更小的计算量,却拥有不俗的性能 深度可分离卷积 深度可分离卷积 我们先来看看正...

见见大魔王 3247
上一篇: Model Garden for TensorFlow问题集锦
下一篇: 解析darknet网络配置文件用了哪些层
刀么克瑟拉莫
博客等级 码龄14年 68粉丝 268原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值