Linux学习之CentOS--Linux系统启动详解

在这篇随笔里面将对Linux系统的启动进行一个详细的解释!我的实验机器是CentOS6.4,当然对于现有的Linux发行版本,其系统的启动基本上都是一样的!

首先我们来看下Linux系统启动的几个步骤:

对于Linux系统来说,系统的整个启动过程就是分为这6个部分。下面将对每一个部分的启动时所完成的功能进行详细解释。

一、BIOS

对于BIOS我想大家应该都不陌生,只要是PC机,当电脑启动时第一个运行的就是BIOS。BIOS(Basic Input Output System)我们称之为基本输入输出系统,一般都是保存在主板上的BIOS芯片中。

计算机启动时第一个运行的就是BIOS,BIOS主要是负责对硬件进行检查,比如检查接在主板上的各种PCI硬件设备,当电脑的硬件检测不通过时,电脑就会发出滴滴的声音,这时我们就要对硬件进行检查了。如果BIOS对硬件检测通过的话,它就继续进行下一个操作,也就是查找可启动设备。

对于可启动设备在BIOS设置中进行定义,常见的可启动设备包括USB、CDROM、HD。

二、MBR

MBR在之前的硬盘分区时有讲过其功能,MBR(Marst Boot Recorder),我们称之为主引导记录。BIOS是怎样寻找可启动设备的呢?我们知道在分区时,硬盘的第一块扇区512个字节就是存放的MBR,如果该设备是可启动设备,那么该扇区的最后两个字节肯定是55/AA,所以此时在寻找可启动设备时,如果发现该设备的最后两个字节是这个,那么该设备就是可启动设备。

BIOS在找到可启动设备以后就会执行其引导代码,因为MBR占据了第一块扇区的512字节,分区表占用了 16*4 =64字节,再加上最后两个标志字节,所以MBR的引导代码就是MBR的前446个字节,当然这446个字节太小了,并不能完成整个操作系统的引导程序,所以这446个字节里面可能存放的就是启动引导程序的一些代码。

三、GRUB

GRUB是GRand Unified Bootloader的缩写,它是一个多重操作系统 启动管理器。

GRUB是现在Linux使用的主流的引导程序,当然现在的GRUB不仅仅是能引导Linux系统,对于Winodows、Mac OS、BSD等几乎所有系统它都能引导。

GRUB的一些相关配置文件都是保存在了 /boot/grub 这个目录下。我们可以进去看下其里面的内容

[root@xiaoluo ~]# cd /boot/grub/
[root@xiaoluo grub]# ls -l
total 280
-rw-r--r--. 1 root root     63 May 14 01:30 device.map-rw-r--r--. 1 root root  13380 May 14 01:30 e2fs_stage1_5-rw-r--r--. 1 root root  12620 May 14 01:30 fat_stage1_5-rw-r--r--. 1 root root  11748 May 14 01:30 ffs_stage1_5-rw-------. 1 root root    796 May 14 01:30 grub.conf-rw-r--r--. 1 root root  11756 May 14 01:30 iso9660_stage1_5-rw-r--r--. 1 root root  13268 May 14 01:30 jfs_stage1_5
lrwxrwxrwx. 1 root root     11 May 14 01:30 menu.lst -> ./grub.conf
-rw-r--r--. 1 root root  11956 May 14 01:30 minix_stage1_5-rw-r--r--. 1 root root  14412 May 14 01:30 reiserfs_stage1_5-rw-r--r--. 1 root root   1341 Nov 15  2010 splash.xpm.gz-rw-r--r--. 1 root root    512 May 14 01:30 stage1-rw-r--r--. 1 root root 125992 May 14 01:30 stage2-rw-r--r--. 1 root root  12024 May 14 01:30 ufs2_stage1_5-rw-r--r--. 1 root root  11364 May 14 01:30 vstafs_stage1_5-rw-r--r--. 1 root root  13964 May 14 01:30 xfs_stage1_5

我们看到在grub目录下存放了许多的文件,我们大致先了解一下这些文件所代表的含义。

对于stage1文件,我们可以看到其大小为512个字节,这个文件其实就是上面所说的MBR的一个备份,如果之前的MBR出问题了,我们可以使用这个stage1来恢复过来。对于另外一些例如e2fs_stage1_5、fat_stage1_5等这些文件,这些文件是在stage1执行完才执行的。这些文件前面的单词都是一些文件系统的名字,那么为什么要加载这么多的文件系统呢?因为当我们GRUB引导程序运行完就要去加载文件系统中的操作系统内核了(kernel),而对于不同的操作系统可能文件系统不相同,所以这里在执行完stage1以后加载这么多的文件系统就是为了去找到操作系统的内核以及驱动信息。在这些执行完以后就是执行stage2这个文件了,这个文件我们看到它有 125992 字节,整个操作系统的引导程序代码就是在这里了。

对于GRUB,其主配置文件是存放在grub.conf这个文件里面的,我们可以看下这个文件里面的内容:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,1)
#          kernel /boot/vmlinuz-version ro root=/dev/sda2
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=0  
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /boot/initramfs-2.6.32-358.el6.x86_64.img

我们对其每行配置文件代表的信息来分析一下。

default=0 代表的是选择第几个配置,下面的每一个 titile 代表一个操作系统的配置信息,如果有多个操作系统信息,则下面就会有多个titile,这里default=0,表示默认使用第一个操作系统的配置,也就是使用第一个title。

timeout=5 ,表示刚进入系统时默认等待的时间,这个我们可以修改,如果将其修改成0,则系统直接进入引导。

splashimage=(hd0,1)/boot/grub/splash.xpm.gz 表示的是倒计时界面下,页面显示的背景图片

hiddenmenu表示隐藏菜单

title 表示每一个操作系统的配置,后面跟的CentOS (2.6.32-358.el6.x86_64)就是操作系统的名字,这个可以自己随便取名

下面的

① root (hd0,1)

表示操作系统的 /boot 分区所在硬盘的分区,hd0,1表示第一块硬盘的第二个分区,我们当前操作系统的/boot分区就是在这个分区下。

② kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

这个表示的是操作系统的内核存放位置,当前的CentOS操作系统的内核就是存放着 /boot 目录下的 vmlinuz-2.6.32-358.el6.x86_64, 后面跟的是内核的参数,ro表示只读的,每一个参数都用空格隔开

③ initrd /boot/initramfs-2.6.32-358.el6.x86_64.img

Linux为什么启动的速度那么快,是因为其操作系统的内核非常的精简,为了让Linux的内核保持精简,我们就将其不常用的驱动、功能编译为模块,在需要的时候对其进行动态加载。所以这个initrd就是存放的是我们的那些不常用的驱动、功能所编译成的模块。之前的Linux版本里面使用的是initrd文件,initramfs是initrd的一个替代优化版本,比initrd更加节省空间、更加灵活。所以现在的Linux版本都是用的是initramfs。

我们如果有多个操作系统的配置信息的话,就要在下面再定义一个title,然后按照上面的格式,定义好/boot分区的目录以及内核的目录等

四、Kernel

MBR引导代码就是为了启动GRUB去加载操作系统的内核,Linux系统的内核都是存放在/boot目录下

[root@xiaoluo boot]# ls -l vmlinuz-2.6.32-358.el6.x86_64 -rwxr-xr-x. 1 root root 4043888 Feb 22 08:56 vmlinuz-2.6.32-358.el6.x86_64

操作系统在加载内核时的时候通常还会去加载内核模块打包文件:/boot/initramfs-2.6.32-358.el6.x86_64.img

我们在系统启动完后通过 dmesg 命令可以查看本次启动时操作系统的内核输出信息,这样可以操作系统内核出现问题时对其进行错误排查

[root@xiaoluo boot]# dmesg
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-358.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 2013
Command line: ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
KERNEL supported cpus:
  Intel GenuineIntel
  AMD AuthenticAMD
  Centaur CentaurHauls
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 00000000207f0000 (usable)
 BIOS-e820: 00000000207f0000 - 0000000020800000 (ACPI data)
 BIOS-e820: 00000000fffc0000 - 0000000100000000 (reserved)
DMI 2.5 present.
SMBIOS version 2.5 @ 0xFFF60
DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved)
e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
last_pfn = 0x207f0 max_arch_pfn = 0x400000000
MTRR default type: uncachable
MTRR variable ranges disabled:
x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
CPU MTRRs all blank - virtualized system.

***************************省略N个字***********************************************************

我们看到其输出了非常多的信息,都是操作系统启动时,内核的输出信息。当然我们可以在 /var/log 目录下发现也有一个 dmesg 文件,这个文件存放的内容和通过 dmesg 命令输出的内容是一模一样的

[root@xiaoluo ~]# ls -l /var/log/dmesg-rw-r--r--. 1 root root 21190 May 19 13:06 /var/log/dmesg

五、init

在操作系统加载完内核以后,这时就会运行操作系统上的第一个进程 init,我们可以通过 ps -aux | more 命令来看一下

[root@xiaoluo ~]# ps -aux | more
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  19348  1464 ?        Ss   13:05   0:01 /sbin/init

我们看到操作系统运行的第一个进程就是 init 进程,这个进程在启动以后就会一直运行,直到系统退出关机。

init进程会调用 /etc/rc.d/rc.sysinit 这个脚本对系统进行初始化,挂载文件系统,并且根据运行基本启动相应的服务。

Linux系统的运行级别:

-0  关机-1  单用户模式-2  不带网络的多用户模式-3  多用户模式-4  未使用-5  X11图形化模式-6  重新启动

我们通常将其设置成3或者5,运行级别3和5的唯一不同,就是是否启动时拥有图形界面。在生产环境下我们通常将其设置成3,直接进入到命令行终端模式

我们可以通过修改 /etc/inittab 这个文件来修改系统默认的运行级别:

[root@xiaoluo ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:

我们看到当前的运行基本默认是5,也就是拥有图形界面。

其实在/etc目录下还有一个init目录,里面存放的是init的其它一些配置文件

[root@xiaoluo ~]# cd /etc/init
[root@xiaoluo init]# ll
total 68
-rw-r--r--. 1 root root  260 Jan  9 19:13 control-alt-delete.conf-rw-r--r--. 1 root root  130 Jun 22  2012 init-system-dbus.conf-rw-r--r--. 1 root root  316 Jan  9 19:13 kexec-disable.conf-rw-r--r--. 1 root root  409 Jan  9 19:13 plymouth-shutdown.conf-rw-r--r--. 1 root root  217 Jan  9 19:13 prefdm.conf-rw-r--r--. 1 root root  358 Jan  9 19:13 quit-plymouth.conf-rw-r--r--. 1 root root  281 Jan  9 19:13 rc.conf-rw-r--r--. 1 root root  909 Jan  9 19:13 rcS.conf-rw-r--r--. 1 root root  283 Jan  9 19:13 rcS-emergency.conf-rw-r--r--. 1 root root  580 Jan  9 19:13 rcS-sulogin.conf-rw-r--r--. 1 root root 2915 Aug 23  2010 readahead-collector.conf-rw-r--r--. 1 root root 1559 Aug 23  2010 readahead.conf-rw-r--r--. 1 root root  726 Aug 23  2010 readahead-disable-services.conf-rw-r--r--. 1 root root 1162 Jan  9 19:13 serial.conf-rw-r--r--. 1 root root  643 Jan  9 19:13 splash-manager.conf-rw-r--r--. 1 root root  329 Jan  9 19:13 start-ttys.conf-rw-r--r--. 1 root root  198 Jan  9 19:13 tty.conf

我们可以看到,这里面有许多的配置文件,我们可以根据自己的需要修改其里面的内容,这样init进程启动时就会去执行里面的功能。

我们通过 runlevel 命令可以查看我们当前的以及上一次的启动级别:

[root@xiaoluo init]# runlevel
N 5

N表示没有上一个启动级别,5表示当前的启动级别

通过init命令我们可以修改当前的系统运行级别,例如输入   init 3 ,此时操作系统就会进入到命令行模式

通过 statx 命令  或者 init 5 命令就可以回到运行级别5的模式

每个运行级别启动时的对应启动服务都是保存在了 /etc/rc.d/rc[0123456].d中,例如我们当前的运行级别是5,则操作系统的启动服务就是在 /etc/rc.d/rc5.d这个目录下,里面都是运行级别5所需启动的服务

[root@xiaoluo rc.d]# ls
init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
rc      rc1.d  rc3.d  rc5.d  rc.local

至此,整个Linux操作系统就已经全部的启动起来了。

Keil v5+STM32F103C8T6+st_link软硬件配置及程序烧录 双击pack文件安装,即可在Options for Target 'Template'(就是小锤子)界面看到stm32包,默认是只有ARM包的。在Options for Target 'Template'里需要配置的项:Device、Debug、Debug->Settings、Utilities。st-link上需要对应接的口分别是8、2、6、4,分别是3.3V、SWDIO、SWCLK、GND。STM32上在JP5区域连线有2、7、9、12号脚,分别对应+3.3V、TMS、TCK、GND。 阅读详情

相关推荐

Linux(Centos 7.6)命令详解:scp

安全复制(远程文件复制程序)(secure copy (remote file copy program))。scp用于网络联通主机间的文件复制,它使用ssh进行数据传输,也使用ssh进行安全验证,所以scp在没有配置ssh互信时需要输入密码或口令它们用于身份验证。

Querycache的博客 4638

【STM32】使用RTE ,从 0 开始创建一个 (keil) ARM MDK工程(纯keil,标准库,以STM32F103C8T6为例)

使用 ARM MDK 的 RTE 创建新的 STM32 工程。

风高秋月白,雨霁晚霞红 2万+

CentOS 7 系统启动流程和服务控制systemd

系统启动和服务控制一、启动过程与CentOS6的区别1、引导方式2、初始化程序3、运行级别二、服务控制1、概述2、配置文件3、systemd单元4、systemd服务管理1、服务管理命令2、服务的配置文件解析3、其他命令 一、启动过程 开机自检:开机以后,根据bios的设置对cpu、内存、显卡、键盘等设备进行初步检测,并初始化硬件,根据启动顺序移交控制权,一般为硬盘 MBR引导:硬盘根据MBR的设置,和引导信息调用启动菜单grub2 GRUB2菜单:引导装在程序,显示启动菜单给用户选择,并根据所选项加载l

shengjie87的博客 1271

STM32F103C8T6学习笔记之keil工程创建和移植

1.新建工程2.选择设备型号3.文件配置(固件库地址:https://pan.baidu.com/s/1F5EALUaP3bhIzhTs40RQog 提取码:0qld )4.工程里建立和本地文件同名的分组(Start、Library、User等),并将文件添加进文件夹。启动文件只需要选择一个,如STM32F103C8T6为中端产品系列,应选择md结尾的。5.选项 -> C/C++ -> Define 内定义 USE_STDPERIPH_DRIVER 字段;

weixin_66957847的博客 1419

Python读取ECMWF grib数据;Anaconda配置eccodes和cfgrib环境及安装过程

python读取grib数据,eccodes,cfgrib安装。

qq_36714629的博客 2244

【PCIe】CDNS PCIe VIP 杂记 -- Callback

最近在研究Cadence PCIe VIP,怎一个“惨淡”来描述。用的真是一言难尽啊,都是泪。记录一些最近学习的觉得想记录的内容在此,仅供参考讨论学习哈。有不对之处请指出大家一起讨论。

小邦是名小ICer的博客 2716

搭建STM32F103C8T6 keil标准库基础工程

创建STM32F103C8T6标准库基础工程。STM32F103C8T6是意法半导体的一款MCU,主要参数如下图:STM32F1系列MCU容量的区分标准:STM32F103C8T6属于中容量MCU。本基础工程旨在记录keil工程的创建流程,未来的功能扩展也可以这个工程来扩展。

RMDYBW的博客 3178

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 461

【Linux学习笔记1】CentOS-Linux系统启动过程详解

Linux系统启动过程详解【前言】Step1 加载BIOSStep2 BIOS 上电自检(POST)Step3 读取MBRStep4 执行Boot LoaderStep5 加载Linux内核Step6 运行systemd(Init)进程Step7 用户登录 【前言】 理解Linux操作系统的启动过程具有非常重要的意义。 首先,这是学习Linux系统的第一步,是之后学习的基石,无论之后学习Linux运维还是开发都需要了解 其次,万物归一。可以从Linux的启动过程窥见一般os启动的过程。 本文参考了《Li

Greif_HairLine的博客 505

京东技术产品经理面试全记录:从简历投递到一面45分钟实战复盘

本文深度复盘京东技术产品经理面试全流程,从策略准备、思维题拆解、项目阐述到反问谈判,提供了一套可演练的求职策略体系。文章强调该岗位需具备横跨技术与商业的枢纽能力,并通过“QQ分组vs微信标签”等案例,剖析了产品思维与结构化表达在面试中的关键作用,助力候选人将紧张转化为掌控感。

weixin_29275257的博客 629

innovus:ccopt_design分段长tree操作

这步don't touch保证后面完整cts尽量不会动到已经长过的tree。需要给sub tree手写一个spec,参考create_ccopt_clock_tree_spec -file的写法,只写create_ccopt_clock_tree和skew group部分就行。

m0_61544122的博客 1676

51单片机公交车报站系统设计:Proteus仿真与Keil C语言实战

在嵌入式系统开发中,单片机通过输入输出控制实现人机交互与设备驱动,其核心在于IO口时序控制与状态机逻辑。51单片机作为经典入门平台,凭借丰富外设与仿真支持,广泛应用于课程设计与工程实践。公交车报站系统集按键扫描、语音播报、显示刷新与掉电存储于一体,是掌握单片机综合设计的典型项目。借助Proteus仿真与Keil C语言开发,可完整验证硬件逻辑与软件流程,有效提升嵌入式系统调试能力。

weixin_34101229的博客 365

SAP BTP Trial 生命周期全解析:90 天试用、30 天活跃规则、Kyma 有效期与向 Free Tier 的顺滑迁移

摘要: SAP BTP免费试用账号(trial)提供90天有效期,需每30天登录一次保持活跃状态。Kyma运行时有效期仅14天,需特别注意重建。到期后数据不可恢复,建议将关键配置脚本化并保存。若需长期使用,可迁移至无时间限制的免费层(free tier)。文章详细拆解了试用生命周期规则,包括续期、删除机制,并针对CAP开发、集成套件和Kyma等场景提供实操建议,帮助用户规避常见误区,高效利用试用资源。(150字)

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

Linux学习之CentOS(二十一)--Linux系统启动详解

在这篇随笔里面将对Linux系统的启动进行一个详细的解释!我的实验机器是CentOS6.4,当然对于现有的Linux发行版本,其系统的启动基本上都是一样的! 首先我们来看下Linux系统启动的几个步骤: 对于Linux系统来说,系统的整个启动过程就是分为这6个部分。下面将对每一个部分的启动时所完成的功能进行详细解释。 一、BIOS 对于BIOS我想大家应该都不陌生,只要是PC机,当电脑...

weixin_33828101的博客 173

8、干式变压器

干式变压器的发展,是人类不断挑战材料科学和热物理极限的过程,每一次技术突破,都是在。温度升高,ε_r反而下降(因为分子活动性增强,极化响应变慢)。:固体导热的热阻比液体对流大一个数量级,这是无法逾越的物理规律。Nomex在高温下不是逐渐分解,而是保持性能直到一个临界点。如果 T_a = 40°C,则 T_c = 146.7°C。干式变压器(固体介质分隔):热场、电场、流场(空气)形成三维氢键网络,即使在高温下也能保持机械强度。:不是在现有技术上修修补补,而是寻找新的。仍在H级绝缘允许范围内(≤180°C)

renpeng2692873032的博客 228

11、改进的加权轮询调度算法

本文详细介绍了对传统加权轮询(WRR)调度算法的改进方法,包括动态权重调整、优先级调度和预测机制,旨在提升系统的公平性、响应速度和适应性。通过设计与实现改进算法,并结合实验验证其在响应时间、资源利用率和公平性方面的显著提升,同时列举了该算法在数据中心、云服务平台、CDN及电商平台等实际场景中的应用案例。

day7的博客 190

Linux 系统启动原理

target还可以包涵其他target,例如graphical.target包涵multi-user.target,multi-user.target包涵basic.target,basic.target包涵sysinit.target。使用 /etc/grub.d/ 目录、/etc/default/grub 文件和 grub2-mkconfig 命令进行配置,以生成 /boot/grub2/grub.cfg 文件。/etc/grub.d/,该目录下存放多个数字开头的脚本,按照从小到大的顺序执行。

2503_93995253的博客 1473

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

学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启动相关的配置文件 18.2 centos7系统启动过程及相关配置...

weixin_30783913的博客 1341

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

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

Linux系统启动流程详解

Linux系统启动流程详解 一、linux系统启动流程 以下是centos6的启动流程 CentOS6启动流程: Linux系统启动的大体流程,可以概括为: POST –&gt; BIOS –&gt; GRUB –&gt; kernel –&gt; init POST(加电自检) Linux系统在接通电源后,首先系统会启动POST加电自检程序来对内部的各个配...

lv8549510的博客 2897

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux CentOS系统启动时遇到的报错

Linux CentOS系统启动时遇到的报错1. 问题:Mounting HGFS shares: [FAILED]和Device does not seem to be present…[FAILED]2. 解决方法2.1 问题一:Mounting HGFS shares: [FAILED] 问题分析:这是由于VMware的一个新功能设置问题造成的报错,此功能是为了使Guest(VM)和host(

Catherine的笔记 3324

呕心沥血!CentOS系统启动流程详解!

概述:系统启动流程是Linux一个重要的内容,深入了解启动流程会对我们学习Linux起到一个顺水推舟的作用。因为CentOS 7改动较大,所以下面的内容只是针对CentOS 5和6来说的。下面进入正题。 启动流程: 第一步:POST加电自检 此过程的就是为了检测一下外界的硬件设备是否能够正常运行,如CPU,内存设备,硬盘等等这些硬件设备是否可以正常工作。 第二步:BIOS选择启动方式 BIOS对于...

weixin_34212189的博客 540
上一篇: Solaris 10安装Oracle 10g(1、准备工作)
下一篇: RHEL6系统启动过程解析
xukeworknet
博客等级 码龄16年 7粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值