C/C++ 调用avx/sse函数(Intrinsics函数)

如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512 Most compilers will automatically define: __SSE__ __SSE2__ __SSE3__ __AVX__ __AVX2__ etc, according to whatever command line switches you are passing. You can easily check this with gcc (or gcc-com... 阅读详情

原文地址:https://blog.youkuaiyun.com/reformatsky/article/details/69388772

最近,实验室同学要写一个计算异或校验的代码,用在raid6里,他说kernel里面用的avx,于是我参考网上一些教程和Intel.org的资料,花了4,5天,踏平了一个大坑之后完成一个简单的对比测试。IDE 用的qt creator,gcc 需要加 -mavx2
代码在我的github上avx2_c

网上的博客很多,就不介绍基础了,讲些最重要的。

1. 环境

OS: 本人是 win10 和 centos7,其他的linux应该都差不多
gcc: 低版本的gcc 不支持 -mavx2 参数,具体是在哪个版本加进来的不知道,试试就知道了。
CPU: 其实处理器也需要支持这个指令集,比如avx512需要Intel四代之后才有,可以去对应厂家的官网上查询,或者直接跑代码,看下耗时。

2. immintrin.h

mingw里面有这个头文件,包含了各种位数(128bit, 256bit, etc)的类型定义、函数封装。下面我用到的是256bit的,类型定义在avxintrin.h,函数在avx2intrin.h

3. 关键数据结构

3.1 类型

typedef float __m256 __attribute__ ((__vector_size__ (32),
                     __may_alias__));
typedef long long __m256i __attribute__ ((__vector_size__ (32),
                      __may_alias__));
typedef double __m256d __attribute__ ((__vector_size__ (32),
                       __may_alias__));

float, long long, double 指的是构成256bit(32Byte)的unit 类型,add,sub这类算数运算需要注意,and,or,xor这些位运算应该就无所谓了(没有测试过)。

看avxintrin.h里面,这三个类型的上面其实还有从char 到double的定义,我还没有使用过,不清楚情况。
下面的代码都以double为例,其他几个类似。

3.2 函数

3.2.1 load

把连续32字节的内存复制到__m256d 类型变量里

extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_load_pd (double const *__P)
{
  return *(__m256d *)__P;
}

extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_loadu_pd (double const *__P)
{
  return (__m256d) __builtin_ia32_loadupd256 (__P);
}

两个函数的区别在: 前者没有u,后者有u 。
带u的表示即使需要复制的内存起始地址不是32的倍数也没事,应该是汇编那层给处理了,至少不会出错;
不带u的,如果起始地址不是32的倍数,运行的时候就会segfault,这个错误卡了我三天,根本不知道错在哪儿,在stackoverflow上搜到一个类似的,外加 Intel org 的视频,看到 _mm_malloc(申请的内存起始地址是32的倍数) 函数才想到,网上的博客都没有提过这个。
带u和不带u这个两个函数是此前 qt creator 的自动补全显示出来的,当时以为没什么区别,就先用了不带u的。

3.2.2 运算
extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_xor_pd (__m256d __A, __m256d __B)
{
  return (__m256d) __builtin_ia32_xorpd256 ((__v4df)__A, (__v4df)__B);
}

目前我就使用过xor,两个加数,返回和,没有碰到什么坑。

3.2.3 store

这是最后一步,整个流程看起来确实很像汇编。

extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_store_pd (double *__P, __m256d __A)
{
  *(__m256d *)__P = __A;
}

extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_storeu_pd (double *__P, __m256d __A)
{
  __builtin_ia32_storeupd256 (__P, (__v4df)__A);
}

和前面load一样也是内存起始地址是否32倍数的问题,不多说。

4. 启发

4.1 参考官方资料

在碰到奇怪问题的时候,官方资料的效果不会差。
博客可以快速上手,但是作者不一定踩到所有的坑,碰到这种问题就只能求助于官方资料了。

4.2 自动补全有奇效

如果没有自动补全,我就得去看头文件里面的函数定义,才知道有u和不带u这两种函数。

4.3 调试过程要脑洞

在知道是地址问题前,我测试过 。
传入参数数组or指针。
编译过程-g -O 。
windows linux环境。
特别是尝试过程中有次不加-O2就segfault,加了就正常,搞得我一头雾水。

5 参考

1 http://www.cnblogs.com/zyl910/archive/2012/10/22/simdsumfloat.html
2 http://www.cnblogs.com/zyl910/archive/2012/08/27/intrin_table_gcc.html
3 http://blog.youkuaiyun.com/zyl910/article/category/1128358
4 http://stackoverflow.com/questions/4468420/segmentation-fault-due-to-memory-alignment-in-sse
5 intel org 的视频暂时不记得在哪儿了。。。

C++avx256指令集加速实例 背景 avx256是x86cpu架构下实现SIMD(单指令多数据)的指令集。它能够利用cpu内部256bit的寄存器,同时对4位double或8位int类型的数操作,达到很好的加速效果。这里通过一个计算π\piπ的实例来展示其威力: π=4∫0111+x2dx \pi = 4\int_0^1\frac{1}{1+x^2}dx π=4∫01​1+x21​dx linux系统下可以通过如下命令查看电脑是否支持avx256指令集: cat /proc/cpuinfo | grep flags sse4就表示 阅读详情

相关推荐

我的第一个调用Intrinsics函数的程序

描述: 以前需要使用汇编对CPU的指令集进行优化,现在可以直接使用Intrinsic函数达到类似效果, 可读性和移植性相对于汇编语言有长足进步。现在极少有x86架构cpu不支持SSE/SSE3指令集 所以是时候了解Intrinsic函数(SSE、SSE2)的使用。 现在让我们通过简单的例子,来了解Intrinsic函数(SSE/SSE2指令)如何使用!

lee353086的专栏 8948

C/C++ 调用AVX/SSE函数的注意事项及准备工作

OS: win10 和 centos7,其他的linux应该都差不多。(参考这篇文章,作者也在ubuntu18.04以及Archlinux上进行过对应的测试均可) gcc: 如果使用AVX指令集在编写cmake或者makefile文件时需要加上 -mavx2 参数。低版本的gcc 不支持 -mavx2 参数,具体是在哪个版本加进来的不知道,试试就知道了。 CPU: 其实处理器也需要支持这个指令集,比如avx512需要Intel四代之后才有,可以去对应厂家的官网上查询,或者直接跑代码,看下耗时。SIMD的相

daijingxin的博客 8618

Intel Intrinsics 指令集优化实战:从SSE到AVX的性能提升指南

本文详细介绍了Intel Intrinsics指令集优化实战,从SSE到AVX的性能提升方法。通过内存对齐、数据类型选择和实际案例(如矩阵乘法与图像处理),展示如何充分利用CPU寄存器实现并行计算,显著提升数据处理性能。

threejs5artist的博客 1007

SIMD学习博客

在C/C++代码中使用SSE等指令集的指令(3)SSE指令集基础 SSE入门C/C++ demo SSE4.1和SSE4.2 Intrinsics各函数介绍 C/C++ 调用avx/sse函数(Intrinsics函数)

码灵薯的博客 1327

SSE与AVX指令集优化实战:从基础到性能调优

本文深入探讨SSE与AVX指令集优化实战,从基础概念到高级性能调优技巧。通过详细的代码示例展示如何利用SIMD技术加速数组求和、矩阵运算等计算密集型任务,涵盖内存对齐、intrinsic函数使用和编译器配置等关键实践,帮助开发者显著提升程序性能。

wind6的博客 252

SIMD优化实战:从原理到C/C++高性能编程指南

在计算机体系结构中,单指令多数据(SIMD)是一种重要的数据级并行技术,它允许一条指令同时处理多个数据元素,从而显著提升计算密集型任务的吞吐量。其核心原理是通过扩展的向量寄存器(如x86的XMM/YMM/ZMM或ARM的NEON寄存器)和专用指令集,实现对数组、矩阵等规整数据的并行操作。这项技术的核心价值在于最大化CPU算术逻辑单元(ALU)的利用率,突破传统标量计算的性能瓶颈。在图像处理、科学计算、音视频编解码、游戏物理引擎等高数据并行度场景中,SIMD优化往往是实现极致性能的关键手段。通过编译器intr

weixin_30740581的博客 367

指令集简介

SIMD(Single Instruction Multiple Data)是单指令多数据技术,目前Intel处理器支持的SIMD技术包括MMX,SSE,AVX。SSE(Stream SIMD Extentions,数据流单指令多数据扩展)是英特尔继MMX(Multi Media eXtension,多媒体扩展指令集)之后推出的新一代CPU指令集。MMX提供了8个64bit的寄存器进行SIMD操作,SSE系列提供了8个128bit的寄存器进行SIMD操作。

贾路飞的博客 2万+

深入解析SSE指令集优化:从基础到实战应用

本文深入解析SSE指令集优化,从基础概念到实战应用。文章详细介绍了SSE如何通过SIMD并行处理技术,在C/C++程序中实现性能的倍数级提升,特别适用于图像、音频处理和科学计算等场景。核心内容包括SSE数据类型、加载-计算-存储模式、内存对齐关键点,并通过向量点乘实战案例展示了优化效果与常见陷阱的规避方法。

weixin_29168675的博客 404

C++向量化编程实战:从SSE到AVX-512的性能优化指南

SIMD(单指令多数据)是现代CPU架构中实现数据并行计算的核心技术,它允许一条指令同时处理多个数据元素,从而大幅提升计算吞吐量。其原理是通过扩展的向量寄存器(如XMM、YMM、ZMM)和专用指令集,在单个时钟周期内完成多个相同操作。这项技术的核心价值在于突破内存带宽瓶颈,显著加速科学计算、图像处理、物理模拟等数据密集型任务。在应用场景上,从早期的多媒体处理到如今的高性能计算和机器学习推理,向量化已成为底层优化的关键手段。本文以C++开发为背景,深入解析了如何利用SSE、AVX2、AVX-512等指令集进行

weixin_34364071的博客 462

sha512-avx-asm.rar_AVX-512_avx

Implement fast SHA-512 with AVX instructions. (x86_64).

Code Composer Studio 8.3.1安装与常见问题解决指南

本文提供了Code Composer Studio 8.3.1版本的详细安装指南与常见问题解决方案。内容涵盖从下载离线安装包、系统环境准备、自定义安装步骤,到首次启动配置及汉化建议。重点解析了安装过程中可能遇到的闪退、卡顿、Java虚拟机错误等典型问题的排查与修复方法,旨在帮助开发者高效部署这一稳定的嵌入式集成开发环境。

weixin_29195217的博客 327

高性能计算优化:AVX/AVX2指令集应用实践指南

### 向量计算技术赋能 AVX/AVX2作为Intel x86架构的重要向量扩展指令集,通过256位宽的寄存器(YMM)实现单指令多数据(SIMD)并行处理,相比传统SSE指令集将数据吞吐量提升2倍。本项目提供的**15+类 intrinsics 实现**(含初始化、算术运算、数据重排等),可直接嵌入C/C++代码,为科学计算、音视频编解码、机器学习等场景带来**3-5倍性能加速**。 ###

gitblog_01082的博客 1031

2026开源API网关横评:微服务与AI流量治理如何选型

API网关作为微服务架构的流量入口,承担着路由转发、安全管控、限流熔断等核心职责,是分布式系统治理的基础设施。随着大模型应用的普及,AI流量对网关提出了新的要求,如流式响应支持、Token级限流、多模型路由和成本分账等能力。传统网关通过插件拼凑AI功能,而AI原生网关则将这些能力内建。面对众多开源方案,如何根据业务场景做出合理选型?本文对Kong、APISIX、Higress、Envoy Gateway、MAI Gateway等主流开源API网关进行横向评测,从性能、动态性、K8s集成度、AI流量治理等维度

weixin_34242819的博客 481

C++ 硬件特征自适应分发:利用 C++ 特性实现对不同 CPU 指令集(AVX2/AVX-512)的运行时代码路径最优选择

不同的CPU可能支持不同的指令集版本,例如,一台旧的服务器可能只支持AVX,而一台最新的工作站可能支持AVX-512。反之,如果为了兼容性只使用最基础的指令集,又会浪费那些支持高级指令集的CPU的强大性能。随着新指令集的不断涌现,以及异构计算(CPU+GPU+FPGA)的日益普及,这种自适应分发的思想将继续演进,成为构建未来高性能软件的关键能力。其目标是让我们的程序能够在运行时检测当前CPU所支持的指令集,并自动选择执行针对该指令集优化过的代码路径,从而在保证兼容性的前提下,最大化程序的执行性能。

weixin_41455464的博客 409

数字设计与计算机体系结构习题答案,数字设计和计算机体系结构习题答案DigitalDesignandComputerArchitecture.pdf...

数字设计和计算机体系结构习题答案DigitalDesignandComputerArchitecture.pdfDavid Money Harris and Sarah L. Harris, Digital Design and Computer Architecture, © 2007 by Elsevier Inc.Exercise SolutionsC H A P T E R ...

weixin_39851408的博客 1785

西门子 G120 变频器报文

G120报文

mmxxoo_xxmmp的博客 8069

AVX-512实战全曝光:如何在C++中重构并行算法以实现自动向量化

掌握C++并行算法向量化优化方法,提升系统软件性能。在2025全球C++及系统软件技术大会:并行算法的C++向量化优化中,深入解析AVX-512实战技巧,涵盖高性能计算、数据密集型应用中的自动向量化重构策略,显著加速算法执行效率,值得收藏。

PixelIsle的博客 828

CAN:CANape使用Function处理数据

CANape中的function and script习惯称之为脚本(实际为函数和脚本)。这里介绍function,可以实现简单信号a和信号b乘法,比如计算功率(转速与扭矩乘)。该功能前期有专业人员做支援,当时问其编制方法,其回答是看帮助文件。现在没有支援自己动手。 功能描述:电压信号阶梯增加,每次保持1.5s,测量后0.5s位移平均值(假设信号步长10ms,需要取样50个点,但该脚本中点的数目为10个)。图示如下: 刚开始看了软件Function definition→Library function,

Morven 1万+

在C/C++代码中使用SSE等指令集的指令(3)SSE指令集基础

相关参考:http://edu.gamfe.com/tutor/d/11820.htmlhttp://blog.163.com/chenqneu@126/blog/static/45738484200781392836677/ http://dev.gameres.com/Program/Other/SSEjianjie.htm http://www.vckbase.com/document/viewdoc/?id=322scalar packed (1)Summary:前面了解到了可以在代码中使用intr

sinat_22510827的博客 1656

MAC-电脑中的user文件夹在哪?

MAC-电脑中的user文件夹在哪?

兴趣是最好的老师 1万+

【推荐100个unity插件】皮毛shader着色器 实现可以用动的毛茸茸毛绒绒效果

Unity内置渲染管线毛发着色器实现 摘要:本文介绍了Unity内置渲染管线下的毛发着色器实现方案。该方案通过多层渲染技术模拟毛发效果,支持基础光照模型(环境光、漫反射和镜面反射),提供毛发长度调节功能。主要包含10个渲染通道,采用逐步增加的FURSTEP参数(0.05-0.55)分层渲染毛发,每层使用相同的着色器代码但不同参数值。该实现仅适用于内置渲染管线,不支持毛发动态效果,代码结构简洁,通过FurHelper.cginc包含核心着色逻辑。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2676

MPX跌落神坛,AVX-512逆势崛起:向量指令集如何重塑CPU性能?

在CPU底层技术演进中,指令集扩展的成败往往决定性能与安全的天花板。MPX(内存保护扩展)曾试图通过硬件边界检查根治C/C++内存越界,却因高昂开销与生态成本黯然退场;而AVX-512为代表的向量指令集——戏称“维克托家族”——凭借单指令多数据(SIMD)的并行潜力,在大模型推理和高性能计算中重新成为主角。从MMX到AVX-512,寄存器不断加宽,计算密度持续提升,为INT8量化、混合精度运算等AI优化提供了关键支撑。理解这些指令集的原理与适用场景,对后端开发者和AI推理工程师至关重要。本文以可运行代码演示

weixin_30664615的博客 323

【Unity 实用工具篇】✨| 使用Fungus插件制作一个对话系统,简单好学易上手

今天带来的是Unity中一款简单易用的对话插件Fungus,它是一个免费的交互式的对话系统。 Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,并且支持本地化,对相机、Sprite及音乐音效的控制。 学会使用该插件就可以做一些对话剧情类的游戏了,还是非常好用的,下面就来学习一下Fungus具体怎么使用吧!

努力前行,总会成为自己心中的那道光 1万+

C++ SIMD编程入门:从原理到环境配置与性能优化实战

在计算机体系结构中,数据级并行是一种通过单条指令同时处理多个数据元素来提升计算性能的核心技术。其原理基于向量寄存器和向量执行单元,允许CPU一次性加载、计算和存储一组对齐的数据,从而大幅减少循环开销,充分利用硬件并行能力。这项技术的核心价值在于显著提升计算密集型任务的吞吐量,尤其适用于图像处理、音频分析、科学计算和游戏物理等需要处理大规模数组的场景。通过理解SIMD(单指令多数据)的底层机制,开发者可以掌握编译器自动向量化、使用内置函数(Intrinsics)以及调用封装库等三种主要实现方式。本文以C++开

weixin_33787529的博客 390

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

开源项目推荐:关于cpu指令集simd二次封装的开源C++库

C++ image processing and machine learning library with using of SIMD: SSE, AVX, AVX-512 for x86/x64, VMX(Altivec) and VSX(Power7) for PowerPC, NEON for ARM. https://github.com/ermig1979/Simd http://ermig1979.github.io/Simd/ #include <opencv2/core/core.

$firecat利白的代码足迹$ 4931

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: Google C++代码规范笔记(一)
下一篇: 中国名人录?
去级得骨灰
博客等级 码龄18年 26粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值