一篇文章说明白Git使用规范,收藏慢慢看

Git使用规范及命令 当合并代码有冲突时,需要手动修改冲突内容后,add,commit, push. 而rebase 操作的话,会中断rebase,同时会提示去解决冲突。保存后则可以执行git pull拉取远程代码到本地,再把暂存区的修改释放出来。这样我们就可以保证在提交到本地之前就可以把这些远程和本地的提交都处理干净。rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易;用merge的git路线是跳跃的,可以明确的知道是从哪个分支或节点修改的。 阅读详情

大家好,我是厚厚。

好久不见,转眼已经来到了2022年,疫情还没有消散……

不过我们的生活早已经恢复正常

新的一年,Flag还是要立的,万一都完成了呢?

一起加油呀!

最近在项目中发现,有些小伙伴在使用Git的时候,不是那么的规范,抽空整理了一波,希望可以帮到你。

文章主要包含:分支规范、提交合并规范、分支使用流程等。

划重点:提交合并你还在用merge吗?rebase了解一下。

一、分支规范

在开发过程中,一般会存在以下几种分支:

main分支(master)

master为主分支,也是用于部署生产环境的分支,一般由 dev 以及 fixbug分支合并,任何时间都不能直接修改代码。

dev分支

develop 为开发分支,始终保持最新完成以及bug修复后的代码。一般开发新功能时,feature 分支都是基于 dev 分支下创建的。

feature-[功能名称/版本信息]

feature为需求分支,以 dev 分支为基础创建 feature 分支。每个开发人员基于feature分支,创建自己的开发分支。

fixbug-[bug编号]

线上出现紧急问题时,需要及时修复,以 master 分支为基线,创建 fixbug分支,修复完成后,需要合并到 master 分支和 dev 分支。

二、Commit 提交规范

2.1 提交的日志格式

每次git提交日志格式为: 类型:描述

  • 类型

    用于说明 commit 的类别,只允许使用下面7个标识。

    • feat:新功能
    • fix:修补bug
    • docs:修改文档
    • style: 格式化代码结构,没有逻辑上的代码修改
    • refactor:重构,即不是新增功能,也不是修改bug的代码变动,比如重命名变量
    • test:增加测试代码,单元测试一类的,没有生产代码的变更
    • chore:构建过程或辅助工具的变动(不会影响代码运行)
  • 描述

​ 是本次commit的描述,说明白本次提交都干了些啥

​ 例如:

git commit -m "feat: 新增用户详情页接口"
git commit -m "fix: 修复用户注册时电话号码校验逻辑问题"
git commit -m "docs: 新增项目Readme 文档"
2.2 提交频率
  1. 提交粒度按照功能点进行提交,切记不要一直不提交,积攒一大堆代码再提交;
  2. 在push之前压缩那些临时的或者无意义的commit;

切记压缩多个commit,只能对自己的提交进行压缩,不要操作别人的提交,不然可能会被同事追着打

  • 命令行方式
# 找到需要合并的commit;例如:想对最近4次提交进行合并,该如何操作呢?
# -i 等价于 --interactive
$ git rebase -i HEAD~4  
# 或者 通过git log 找到最近4次提交的父类提交,也就是第5次提交的commitId进行合并操作
$ git log 
$ git rebase -i 6ecc2741a2337d6b50f2c35ba877aa040eea3531
# 接下来会进入vi 操作,会自动列出需要合并的提交,结构是这样:操作  commitId 提交备注 例如:
# pick f77f9da list branch update two
# pick ff65dd9 feat: list branch update three and four
# 解释一下常用的操作:pick: 保留这次提交;squash:保留这个commit,但是会将这个commit融入到上一个commit;fixup:同squash,但是会丢弃掉log message
# 修改完之后,保存(:wq)
# 保存之后,紧接着进入修改commit 的vi操作。
# 修改完commit之后,保存(:wq),完工
# 在使用git log 就可以看到之前4个提交日志,只能看到两个了。

pick:保留该commit(缩写:p)

reword:保留该commit,修改该commit的注释(缩写:r)

edit:保留该commit,rebase时会暂停,允许你修改这个commit(缩写:e)

squash:会将当前commit与上一个commit合并(缩写:s)

fixup:与squash相同,但不会保存当前commit的提交注释信息(缩写:f)

exec:执行其他shell命令(缩写:x)

drop:丢弃该次提交(缩写:d)

  • IntelliJ IDEA开发工具自带方式

img

2.3 更新、合并规范

原则:

① 下游分支更新上游分支代码用rebase;

② 上游分支合并下游分支代码用merge;

③ 更新本分支代码用--rebase (如果本分支有多人共同使用开发的时候);

这样可以消除自动产生的无用merge记录,有利于后续查看开发记录。

下游分支在更新上游分支代码的时候,如果使用merge,会产生一条无用的合并记录,比较影响查看历史,使用rebase则不会。

下面分场景说明应该如何操作,目前有个xx需求,由a、b两名同学进行开发分支说明(建立个人开发分支是为了方便做代码review):

  • master:主分支
  • dev:测试分支
  • feature-xx:订单详情需求分支
  • feature-xx-a:订单详情a开发分支
  • feature-xx-b:订单详情b开发分支
场景一:feature-xx分支代码有个更新,本地feature-xx更新代码。

c、d两位同学共同在feature-xx分支上开发,其中一个push了代码,另外一个更新。

  • 命令行方式
# 目前代码处于feature-xx分支,且都已经本地提交(没提交的可以使用暂存功能)
同步远程库代码变动
$ git fetch origin
# 使用rebase进行代码更新代码
$ git pull origin feature-xx --rebase 
  • IntelliJ IDEA开发工具自带方式

img

场景二:feature-xx分支代码有了新代码的更新,a要合并代码。

梳理下思路:

① feature-xx-a更新远程分支代码(不更新也行,因为只有a在使用);

② 合并origin/feature-xx分支代码,有冲突解决冲突,没有冲突将代码push到服务器;

③ 发起合并。

  • 命令行方式
# 假设所有代码已经都提交,无需进行提交或者暂存代码的操作;
$ git checkout feature-xx-a
# 同步远程库代码变动
$ git fetch origin
# 使用rebase进行代码合并
$ git rebase origin/feature-xx
# 如果此时有冲突,解决冲突,并将解决完冲突的代码提交,在执行rebase 即可
$ git rebase --continue
# 合并完之后,push代码,push完之后,a的代码已经到远程feature-xx-a分支了
$ git push 
# 此时,如果需要进行代码审核,发起一个合并请求即可;
# 如果不需要进行代码审核,后续操作就是合并到feature-xx分支
# 切换分支,并更新代码
$ git checkout feature-xx
$ git pull --rebase 
# 合并张三分支代码,并推送远程
$ git merge feature-xx-a
$ git push
  • IntelliJ IDEA开发工具自带方式

步骤①参考场景一,这里只展示一下步骤②应该如何操作。

img

2.4 分支使用及发版流程

负责人排定发版计划,并执行发版控制,注意前/后端的协同。测试版本可根据开发计划,拆解生产版本任务,组织阶段测试。

提测冒烟通过后拉分支继续开发、版本内有bug修复后合到已提交版本重新发版。具体流程如下:

image-20220105102200951

Git使用规范 文章目录一、简介二、分支1、概念2、原则3、协同三、合并1、merge2、rebase3、原则四、代码管理规范1、目的2、适用对象3、原则4、分支管理5、工作流6、日志规范 一、简介         Git是分布式版本控制系统,与之对应另一种常用的SVN是集中式版本控制系统。它们的差异很大,主要是源于它们的设计思想,这里就不展开细说,大家可以自行查找资料。总体来说,Git更灵活、对工作环境依赖更小、更适合多人团队的协同工作,但是 阅读详情

相关推荐

Git使用操作规范

一、创建自己的开发分支 1.1 配置Git环境 1.1.1 Windows平台上安装 1.1.2 Linux平台上安装 1.1.3 Mac平台上安装 1.1.4 基本概念名词解释 Git 工作区、暂存区和版本库 **工作区:**就是你在电脑里能看到的目录。 **暂存区:**英文叫 stage 或 index。一般存放在.git目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 **版本库:**工作..

祥哥 2800

git使用规范

git使用规范 一、分支管理 1.1分支定义 master分支 主分支,最稳定,功能最完整的分支,可以随时发布的代码 以Tag标记一个版本,因此每一个tag都对应一个线上(生产)版本 master 分支一般由 dev 以及 fix 分支合并,不允在master分支直接提交代码!! dev分支 dev分支始终保持功能最全、bug修复后的代码,未发布正式前,功能最新最全的分支 新功能开发必须基于dev分支创建新功能的feat分支 feat分支 开发新功能(feature)由dev为基础创建的新

luozochuan的博客 3571

工作中如何打造优雅的Git工作流和Commit规范!

Git大家都非常熟悉了,就不做过多介绍,但是如何用好Git、如何进行合理的分支开发、Merge你是否有一个规范流程呢

xiaoxucode的博客 1626

Git 使用规范

所有代码合并必须通过 Pull Request(PR)或 Merge Request(MR)完成。代码拉取 → 提交信息校验 → 代码静态检查 → 单元测试 → 构建 → 部署 → 发布通知。每项功能、修复或改动应创建独立分支,避免协作冲突,提升开发效率与可维护性。后面跟随的是该版本的说明信息,建议包含主要变更点,方便回溯与沟通。保持提交记录清晰、结构化,便于代码审查、问题回溯和历史审计。所有合并操作需经由代码审核流程,确保团队协作质量与一致性。),变更说明需涵盖新增、优化、修复等内容。

weixin_44876263的博客 2594

阿里内部的工程师是如何规范他们的Git commit?

简介:commit message应该如何写才更清晰明了?团队开发中有没有遇到过让人头疼的git commit?本文分享在git commit规范建设上的实践,规定了commit message的格式,并通过webhook在提交时进行监控,避免不规范的代码提交。 背景 因为某盘的限速功能真的是让我一个脑袋两个大,实在没办法了,就把一些资料上传到了我的git上,今天从git上扒东西的时候,家里的小朋友跟我说,你这好像一个大的网盘呀,我突然灵机一动,对啊,git用明白了真的是很厉害呀,但是g..

weixin_47908466的博客 2657

用手画了11张图终于搞明白了Git工作流,我怀疑你用的是假 Git

号外号外!《死磕 Java 并发编程》系列连载中,大家可以关注一波: 「死磕 Java 并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁 「死磕 Java 并发编程04」说说Java Atomic 原子类的实现原理 「死磕 Java 并发编程03」阿里二面,面试官:说说 Java CAS 原理? 「死磕 Java 并发编程02」面试官:说说什么是 Java 内存模型(JMM)? 「死磕 Java 并发编程01」10张图告诉你Java并发多线程那些破事 目录 集中式工作流

华科硕士,大厂打工中。编程问题咨询,请私我 3305

Git团队代码规范

分支名含意master主分支,用来承载线上稳定大版本,多个版本需要打tagdev开发分支,顾名思义一直开发的分支,需要合并到master分支基本上使用这两个版本就能够愉快的开发了,bugfix(专门修bug,在master基础上合并到dev和master)、release(发布用,基于dev,合并到dev/master)、feature(特性分支,基/合dev)Git分支管理及命名规范。

Jack魏 1032

git pull原理与实战:从命令到协作规范

Git pull 是分布式版本控制中实现多人协同开发的基础操作,其本质是 fetch 与 merge/rebase 的组合动作,遵循 Git 对象模型与引用机制。理解其底层原理有助于规避合并冲突、历史污染和同步错位等常见问题。技术价值体现在保障协作意图准确传递、历史可追溯、本地工作可控及团队节奏同步。典型应用场景包括日常代码同步、CI/CD 流水线触发、跨团队开源贡献及高可靠性系统发布。本文深入解析 git pull 的非原子性、--rebase 与 --no-commit 的工程意义,并提供可落地的配置策

weixin_33696822的博客 451

Git提交规范

文章目录前言一、Git版本规范1.分支2.Tag3.提交规范总结 前言 统一团队Git Commit标准,便于后续代码review、版本发布、自动化生成change log; 可以提供更多更有效的历史信息,方便快速预览以及配合cherry-pick快速合并代码; 团队其他成员进行类git blame时可以快速明白代码用意; 一、Git版本规范 1.分支 master分支为主分支(保护分支),不能直接在master上进行修改代码和提交 develop分支为测试分支,所以开发完成需要提交测试的功能合并

weixin_43905464的博客 567

git代码提交规范限制-husky和git cz的使用

写在前面 这篇文章能写纯属是没什么可以写的了,最近vue3还没有进行完全看完,所以不敢写教程和博客,害怕误导你们,但是一直不写博客其实也不太好,翻了一下自己写的博客,关于git的还是一些基本的使用,但是关于git规范的目前来看还没有比较详细的文章,所以今天就将husky这个功能性的插件简单的介绍一下,也为后面的代码规范提交打个基础! 介绍一下husky husky你可以简单认为他就是一个在你提交代码的时候进行格式校验的工具,因为git有自己的hooks也就是钩子,不理解的也没关系,你可以简单的理解为g

红岸基地 1919

Idea中Git的使用

原创 Idea中关于Git的使用 ...

weixin_43740680的博客 616

前端一些好学好用的代码规范-Git提交规范(1)

除了 代码格式规范 之外,还有另外一个很重要的规范就是 git 提交规范!在现在的项目开发中,通常情况下,我们都会通过 git 来管理项目。只要通过 git 来管理项目,那么就必然会遇到使用 git 提交代码的场景当我们执行 git commit -m "描述信息" 的时候,我们知道此时必须添加一个描述信息。但是中华文化博大精深,不同的人去填写描述信息的时候,都会根据自己的理解来进行描述。而很多人...

Forever.Sun 532

第八章 MobileNetv3网络详解

本文介绍了基于互补的搜索技术和新颖的架构设计的MobileNets的下一代。MobileNetV3通过硬件感知网络架构搜索(NAS)和NetAdapt算法相结合,针对移动电话CPU进行优化,随后通过新颖的架构改进技术进行了进一步提高。本文开始探索自动化搜索算法和网络设计如何相互协作,以利用互补的方法改进整体技术水平。通过此过程,我们创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用情况。

ADICDFHL的博客 1万+

Git工作流和Commit规范

Git工作流和Commit规范

weixin_45817985的博客 673

基于DPLL算法解决3-SAT问题(C++实现)

近日看到一个3-SAT问题(Boolean SATisfiability Problem, 布尔逻辑可满足性问题),试着写了个算法求解。

qq_63241496的博客 2215

YOLO11全网首发优化:卷积魔改创新 | AAAI 2025 | 一种新颖的风车形卷积(PConv)符合微弱小目标的像素高斯空间分布,增强特征提取,显著增加接受野

我们提出了一种新颖的风车形卷积(PConv)作为骨干网络下层标准卷积的替代品。PConv能更好地符合微弱小目标的像素高斯空间分布,增强特征提取,显著增加接受野,且只引入最小的参数增加。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1973

刚关上灯准备睡时 女朋友抱着我说那个不明白 怎么办?

在某个月黑风高的晚上,一脸愁容的女朋友突然跟我说,Git 老搞不明白,有什么比较好的经验可以分享下吗,说时迟,那时快,二话不说,立马开始奋笔疾书......在平时的 Coding 过程中,我们还是需要一定的 Git 操作的能力的。但是总还是存在一些场景自己突然想不起来,某个场景,应该使用什么 Git 命令可以满足自己的诉求,这个时候又需要打开 Google / Baidu,各种搜索一番,与其把时间消磨在这一次次的重复工作中,倒不如好好研究一下我们常用的命令的玩法。

web全栈开发的博客 3536

功能安全实战系列07-英飞凌TC3xx电源监控开发详解

本文对电源监控(PBIST及MONBIST)开发介绍,步骤详细配合开发中的测试情况,图文并茂,方便理解。

initiallizer的博客 1109

从0到1开发实战手机站(二):Git提交规范配置

生活不能随意过,代码也不能随意写。 前一篇文章我们已经把项目搭建好了,那是不是马上就开始写页面了呀? NO! 无论在哪家公司,都会有相应的代码规范。新入职的员工往往第一步就要接受代码规范的学习。 既然是实战项目,我们也得在写页面之前把相关的规范配置做好。 今天我们先来看看项目中git的使用及相关规范吧。 Git规范及项目配置 目的 统一团队Git Commit标准,便于后续代码review、...

聚风阁 343

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

Qoder AI 编程工具从部署到深度使用实战详解

congge 8338

第八章 GPU Scheduler 分析:8.3 drm_sched_entity — 调度实体

本文介绍了DRM GPU调度器中的drm_sched_entity结构,它作为用户提交命令进入调度器的提交通道,解决了归属、排序和公平性问题。文章首先分析了命令提交的归属需求,然后详细阐述了entity的核心模型,包括其职责、进程映射关系和核心字段。接着说明了用户态提交进入内核后的关键节点路径,以及entity内部的FIFO语义和激活机制。entity通过组织同一context的命令提交包为FIFO队列,使调度器能够在多个entity之间进行优先级和公平性调度,同时保证同一提交通道的顺序执行。

图形/计算GPU的驱动与虚拟化技术分享园地 649

【Git】跟着来一遍,你差不多就该明白git了

本文档用于记录git命令及其结果 期间每执行一步就会在本文档记录,通过编写本文档以及使用git+show log tag status命令可以帮你更快了解git的工作原理。

此地无银 370

【即插即用模块】Transformer篇 | ICCV 2025 | MALA :注意力分布神似Softmax,告别线性注意力性能短板!

MALA(Magnitude-Aware Linear Attention)是一种改进的线性注意力机制,通过引入缩放因子和偏移项,解决了传统线性注意力忽视查询幅度的问题,使其分布更接近Softmax Attention。该模块具有线性复杂度(O(n)),结合RoPE和LEPE编码实现全局-局部位置信息混合,通过z值调制平衡信息权重。实验表明MALA在轻量级视觉任务中能有效平衡效率与精度,注意力可视化显示其分布与Softmax Attention高度相似。代码提供完整的RoPE位置编码和线性注意力

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1106

可视化学习Git基础知识及commit规范

文章目录Git存储结构git addgit commitGit分区工作问题彩蛋 Git存储结构 git add 首先我们创建两个文件交给git管理 git init echo 'aaa'>a.txt echo 'bbb'>b.txt git add *.txt 执行完上述几条命令后,git会将整个数据库储存在.git/目录下,此时我们可以查看.git/objects目录,会发现多了...

mojiewangday的博客 378

VMware16虚拟机:下载和安装教程

VMware16 虚拟机 下载和安装教程

MQ0522的博客 20万+

深度学习工具包 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")

上一篇: Axure教程 | 自适应视图
Hugh Pro
博客等级 码龄16年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值