ELK企业级日志分析系统

ELK 企业级日志分析系统 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。ELK是的缩写,这三个工具组合在一起,用于数据收集、存储、搜索和可视化分析。:核心搜索和分析引擎,负责存储数据并提供快速的全文搜索和分析功能。Logstash:数据收集和处理管道,能够从各种来源(如日志文件、数据库)收集数据,并进行过滤和转换,然后将其发送到Elasticsearch。Kibana。 阅读详情

前言

在规模较大的企业场景中,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
所以企业中都会建立日志服务器,调高安全性、集中化管理,但是相应的大量的日志文件导致对日志分析困难。而今天介绍的ELK就是为了解决这一问题。

一、ELK概述

1.ELK日志分析系统

ELK是由Elasticsearch、Logstash、Kiban三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于 Elastic.co 公司名下,故有此简称。

2.ELK中日志处理的步骤

第一步:将日志集中化管理(beats)
第二部:将日志格式化(Logstash),然后将格式化后的数据输出到Elasticsearch
第三步:对格式化后的数据进行索引和存储(Elasticsearch)
第四步:前端数据的展示(Kibana)
在这里插入图片描述

3.ELK火热的原因

  • 数据(日志)的日益增多

  • 开源

  • 行业属性

  • 运维自身发展

  • ELK自身属性问题:

引用一位大神的说法:

ELK能解决的核心问题,覆盖面也广,标准化,易扩展集成,开发和运维都对其感冒

ELK 本身非常易用,现在也有一个非常好的社区,加上需求如此之大,不火都不行。

  • 大数据导致机器开始变得廉价

  • 写入时计算->查询时计算

4.Elasticsearch概述

(1)Elasticsearch的特性

  • 接近实时的搜索
  • 集群
  • 节点
  • 索引
    • 索引(库)→类型(表)→文档(记录)
  • 分片和副本

(2)分片与副本
在上述特性中,最重要的就是分片和副本,也是让es数据库(Elasticsearch)成为百度这些主流搜索引擎的主要原因,理论上能提升4倍的性能。

结合实际情况分析 :索引存储的数据可能超过单个节点的硬件限制,如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了,为了解决这个问题,elasticsearch提供将索引分成多个分片的功能,当在创建索引时,可以定义想要分片的数量。每个分片就是一个全功能的独立索引,可以位于集群中任何节点上。

  • 分片的特点:
    • 水平分割扩展,增大存储量
    • 分布式并行跨分片操作,提供性能和吞吐量

分布式分片的机制和搜索请求的文档如何汇总完全是有elasticsearch控制的,这些对用户而言是透明的

网络问题等等其他问题可以在任何时候不期而至,为了健壮性,强烈建议要有个故障切换机制,无论何种故障以防止分片或者节点不可用,为此,elasticsearch让我们将索引分片复制一份或多份,称为分片副本或副本

  • 副本的特点:
    • 高可用性,以应对分片或者节点故障,出于这个原因,分片副本要在不同的节点上
    • 性能加强,增加吞吐量,搜索可以并行在所有副本上执行

5.LogStash概述

  • 一款强大的数据处理工具
  • 可实现数据传输、格式处理、格式化输出
  • 数据输入、数据加工(如过滤,改写等)以及数据输出
  • 常用插件:Input、Filter Plugin、Output
    • Input:收集源数据(访问日志、错误日志等)
    • Filter Plugin:用于过滤日志和格式处理
    • Output:输出日志

6.Kibana描述

  • 一个针对Elasticsearch的开源分析及可视化平台
  • 搜索、查看存储在Elasticsearch索引中的数据
  • 通过各种图表进行高级数据分析及展示
  • Kibana主要功能
    • Elasticsearch无缝之集成
      • Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。
    • 整合数据
      • Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。
    • 复杂数据分析
      • Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。
    • 让更多团队成员收益
      • 强大的数据库可视化接口让各业务岗位都能够从数据集合受益。
    • 接口灵活,分享更容易
      • 使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。
    • 配置简单
      • Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行。
    • 可视化多数据源
      • Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache flume、 Fluentd 等。
    • 简单数据导出
      • Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。

二、部署ELK日志分析系统

环境准备
配置和安装ELK日志分析系统,安装集群方式,2个elasticsearch节点,并监控apache服务器日志

主机操作系统IP地址软件
node1CentOS7192.168.235.10Elasticsearch/Kibana
node2CentOS7192.168.235.20Elasticsearch
apacheCentOS7192.168.235.30httpd / Logstash
客户机(宿主机)Windows10192.168.235.100

1.配置elasticsearch环境

echo '192.168.163.11 node1' >> /etc/hosts
echo '192.168.163.12 node2' >> /etc/hosts

java -version    #如果没有安装,yum -y install java

在这里插入图片描述

2.部署elasticsearch软件

(1)安装elasticsearch—rpm包
上传elasticsearch-5.5.0.rpm到/opt目录下

cd /opt
rpm -ivh elasticsearch-5.5.0.rpm

在这里插入图片描述
(2)加载系统服务

systemctl daemon-reload
systemctl enable elasticsearch.service

(3)更改elasticsearch主配置文件

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

vim /etc/elasticsearch/elasticsearch.yml
#17行;取消注释,修改;集群名字
cluster.name: my-elk-cluster
#23行;取消注释,修改;节点名字(node2修改成node2)
node.name: node1
#33行;取消注释,修改;数据存放路径
path.data: /data/elk_data
#37行;取消注释,修改;日志存放路径
path.logs: /var/log/elasticsearch
#43行;取消注释,修改;不在启动的时候锁定内存
bootstrap.memory_lock: false
#55行;取消注释,修改;提供服务绑定的IP地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
#59行;取消注释;侦听端口为9200(默认)
http.port: 9200
#68行;取消注释,修改;集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

检验配置

# 显示非#号开头的行
grep -v "^#" /etc/elasticsearch/elasticsearch.yml 

在这里插入图片描述
(4)创建数据存放路径并授权

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

(5)启动elasticsearch是否成功开启

systemctl start elasticsearch
netstat -antp |grep 9200

在这里插入图片描述
(6)查看节点信息

在宿主机192.168.235.100上访问

http://192.168.235.10:9200
http://192.168.235.20:9200

在这里插入图片描述
在这里插入图片描述
(7)检验集群健康状态

http://192.168.235.10:9200/_cluster/health?pretty
http://192.168.235.20:9200/_cluster/health?pretty

在这里插入图片描述
(8)查看集群状态

http://192.168.235.10:9200/_cluster/state?pretty
http://192.168.235.20:9200/_cluster/state?pretty

在这里插入图片描述

3.安装elasticsearch-head插件

  • 安装elasticsearch-head插件,用于管理集群

(1)编译安装node组件依赖包

yum -y install gcc gcc-c++ make

上传软件包 node-v8.2.1.tar.gz 到/opt
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure && make && make install
这里耗时比较长估计20-30分钟

(2)安装phantomjs(前端框架)

上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt目录下
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
#复制里面的命令包到/usr/local/bin 方便系统识别
cp phantomjs /usr/local/bin

(3)安装elasticsearch-head(数据可视化工具)

上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install

在这里插入图片描述
(4)修改主配置文件

vim /etc/elasticsearch/elasticsearch.yml
......
#-------末尾;添加以下内容--------
http.cors.enabled: true
http.cors.allow-origin: "*"

#-----------参数解释-----------------------------
http.cors.enabled: true				#开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"			#指定跨域访问允许的域名地址为所有


systemctl restart elasticsearch.service

(5)启动elasticsearch-head

必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &

> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
#按回车
elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

(6)使用elasticsearch-head插件查看集群状态

http://192.168.235.10:9100
在Elasticsearch 后面的栏目中输入
http://192.168.235.20:9200

http://192.168.235.10:9100
在Elasticsearch 后面的栏目中输入
http://192.168.235.20:9200

在这里插入图片描述
(7)创建索引
node1(192.168.163.11)
创建索引为index-demo,类型为test

curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

在这里插入图片描述
打开浏览器输入地址,查看索引信息

http://192.168.235.10:9100

在这里插入图片描述
点击数据浏览–会发现在node1上创建的索引为index-demo,类型为test, 相关的信息
在这里插入图片描述

4.安装logstash

收集日志输出到elasticsearch中

(1)安装Apahce服务(httpd)
apache(192.168.235.30)

(2)安装Java环境

java -version        ###如果没有装 安装yum -y install java

(3)安装logstash

上传logstash-5.5.1.rpm到/opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm

systemctl start logstash.service
systemctl enable logstash.service

#建立logstash软连接
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

(4)测试logstash命令

字段描述解释:
-f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e  后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
-t  测试配置文件是否正确,然后退出

定义输入和输出流:
输入采用标准输入,输出采用标准输出(类似管道)

logstash -e 'input { stdin{} } output { stdout{} }'

在这里插入图片描述
使用rubydebug显示详细输出,codec为一种编解码器

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
```![在这里插入图片描述](https://img-blog.csdnimg.cn/2021052016210826.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2VtcHR5X2NzeA==,size_16,color_FFFFFF,t_70#pic_center)

使用 Logstash 将信息写入 Elasticsearch 中

```bash
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.235.10:9200"] } }'

在这里插入图片描述
查看索引信息

多出 logstash-日期
http://192.168.235.10:9100

在这里插入图片描述
在这里插入图片描述
(5)在Apache主机上做对接配置
apache(192.168.235.30)

  • Logstash配置文件主要由三部分组成:input、output、filter(根据需要)
chmod o+r /var/log/messages
ll /var/log/messages

vim /etc/logstash/conf.d/system.conf
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["192.168.235.10:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }


systemctl restart logstash.service

在宿主机上访问
查看索引信息

多出 system-日期
http://192.168.235.10:9100

在这里插入图片描述
在这里插入图片描述

5、安装kibana

node1(192.168.235.10)

上传kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm

cd /etc/kibana/
cp kibana.yml kibana.yml.bak

vim kibana.yml
#2行;取消注释;kibana打开的端口(默认5601)
server.port: 5601
#7行;取消注释,修改;kibana侦听的地址
server.host: "0.0.0.0"
#21行;取消注释,修改;和elasticsearch建立联系
elasticsearch.url: "http://192.168.235.10:9200"
#30行;取消注释;在elasticsearch中添加.kibana索引
kibana.index: ".kibana"              				

systemctl start kibana.service 
systemctl enable kibana.service

在宿主机访问

192.168.235.10:5601

首次登录创建一个索引 名字:system-* (这是对接系统日志文件)
然后点最下面的出面的create 按钮创建
在这里插入图片描述
然后点最左上角的Discover按钮 会发现system-*信息
在这里插入图片描述

然后点下面的host旁边的add 添加 会发现右面的图只有 Time 和host 选项了 这个比较友好
在这里插入图片描述
(6)对接Apache主机的Apache 日志文件(访问日志、错误日志)

cd /etc/logstash/conf.d/

vim apache_log.conf
input {
     file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
      }
     file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
      }
}
output {
    if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.235.10:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.235.10:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

/usr/share/logstash/bin/logstash -f apache_log.conf

在这里插入图片描述
在宿主机192.168.235.10上访问
打开输入http://192.168.235.30,制造点访问记录
在这里插入图片描述
打开浏览器 输入http://192.168.235.10:9100/ 查看索引信息
能发现apache_error-2021.05.20和apache_access-2021.05.20
在这里插入图片描述

点击数据浏览查看响应的内容

打开浏览器 输入http://192.168.235.10:5601
点击左下角有个management选项—index patterns—create index pattern
分别创建apache_error-* 和 apache_access-* 的索引

在这里插入图片描述
在这里插入图片描述
这套架构还是有不完美的地方,所以还能继续优化、扩充架构,例如扩充为efk架构。
efk架构是由elasticsearch+logstash+filebeat+kafka+kibana+redis构成,其中elasticsearch用于数据的索引和存储;logstash用于格式转换;filebeat(轻量级的文件收集工具)用于日志收集;kafka(消息队列,每秒可以处理几十万的并发数据)+redis(缓存服务)用于抗高并发;kibana用于前端数据的展示。

【企业级分布式系统】ELK-企业级日志分析系统 inputoutput和filter(可选)。Input:数据源,如文件、Kafka、Redis 等。Filter:数据处理层,包括格式化、类型转换、过滤等。Output:数据输出目标,如 Elasticsearch、stdout 等。 阅读详情

相关推荐

Agentic RAG:RAG从静态到具有理解、推理、决策的Agentic RAG

RAG技术演进:从静态检索到智能代理 RAG(检索增强生成)技术经历了五个关键发展阶段:基础RAG(关键词检索)、高级RAG(语义理解)、模块化RAG(灵活架构)、图RAG(知识图谱)和最新的Agentic RAG(智能代理)。Agentic RAG通过引入自主AI代理,具备反思、规划、工具使用和多代理协作能力,实现了动态决策和自适应工作流。相比传统RAG的静态检索流程,Agentic RAG能处理复杂多步推理任务,通过自我改进机制提高输出质量,并支持多专业代理协作,显著提升了RAG系统在复杂场景下的表现。

2536

ELK到底是什么

ELK到底是什么? 一、ELK是什么鬼? ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接...

dengqingyuan123的博客 1万+

实战分享:如何用本地替换和插桩调试搞定Kasada最新版x-kpsdk-cd环境检测

本文深入解析Kasada最新版x-kpsdk-cd环境检测机制,提供动态请求拦截、本地替换和函数插桩等实战调试策略。通过Proxy保护破解、关键函数断点调试和环境检测对抗方案,帮助逆向工程师有效应对从280位扩展到294位的加密数组挑战,实现高效补环境调试。

weixin_29251567的博客 569

ELK日志监控可视化图形展示

技术成就梦想 6508

STM32CubeIDE串口打印浮点数踩坑实录:5分钟搞定printf输出小数(附完整配置截图)

本文针对STM32CubeIDE中串口无法打印浮点数的常见问题,提供了详细的解决方案。核心在于通过添加“-u _printf_float”链接器参数,启用标准库的浮点数格式化支持。文章附有完整的配置截图和步骤,并提供了系统性的排查清单,帮助开发者快速解决printf输出小数的问题。

weixin_29163797的博客 343

模型剪枝实战 | Torch-Pruning 库在YOLOv8上的应用指南

本文详细介绍了如何使用Torch-Pruning库对YOLOv8模型进行结构化剪枝,以实现模型“瘦身”。通过DepGraph(依赖图)技术自动处理层间依赖,确保剪枝安全。文章提供了从环境搭建、核心原理理解到完整剪枝流程的实战指南,并强调了剪枝后的微调与性能评估,帮助开发者在保持精度的同时显著提升模型推理速度。

weixin_29046035的博客 503

ELK企业级日志分析系统(elasticsearch+logstash+kibana)

ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash 和 Kiabana三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。(1)#给日志目录可读权限chmod o+r /var/log/messages #让 Logstash 可以读取日志。

Kiryu7的博客 2274

双目视觉入门实战:用Matlab标定相机,再到Python OpenCV完成测距的完整链路

本文详细介绍了双目视觉技术的完整实现流程,从Matlab相机标定到Python OpenCV测距的全链路实践。重点解析了Matlab与OpenCV的参数转换技巧,以及立体校正、视差计算等关键步骤的代码实现,帮助开发者快速掌握双目测距系统的搭建方法。

weixin_29166013的博客 445

企业级日志系统架构——ELK(Elasticsearch、Filebeat、Kafka、Logstash、Kibana)

文章目录一、概述1)Elasticsearch 存储2)Filebeat 日志数据采集3)Kafka4)Logstash 过滤5)Kibana 展示filebeat和logstash的关系二、ELK相关的备份组件和备份方式1)Elasticsearch的snapshot快照备份2)elasticdump备份迁移es数据3)esm备份迁移es数据 一、概述 大致流程图如下: 1)Elasticsearch 存储 Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有

匠人精神,持之以恒! 6290

解锁RK3588:内核模块签名与安全启动配置全攻略

RK3588作为一款高性能嵌入式SoC芯片,其内核模块签名与安全启动配置是保障系统安全的核心机制。本文详细介绍了RK3588的芯片特性,重点阐述了安全启动的硬件信任链原理和内核模块签名的实现方法。通过具体步骤演示了从密钥生成、模块签名到验证加载的完整流程,并深入解析了安全启动配置的硬件连接、软件工具准备、密钥烧录等关键环节。此外,还提出了防御旁路攻击和动态信任链扩展等高级安全策略,为RK3588在工业控制、智能安防等高安全要求场景中的应用提供了全面的安全解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 346

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

1727

ELK企业级日志分析系统部署

ELK企业级日志分析系统部署 文章目录ELK企业级日志分析系统部署1.什么是ELK日志分析系统2.ELK日志分析系统诞生的原因3.ELK日志分析系统的核心开源工具3.1Logstash解析3.1.1LogStash的主要组件3.1.2LogStash主机分类3.2ElasticSearch解析3.2.1ElasticSearch的基础核心概念3.3Kibana解析3.3.1主要功能4.ELK的日志...

double_happy111的博客 684

从 Token 到 Agent:一文串起 AI 大模型核心概念

摘要:本文系统解析了现代AI系统的八大核心概念:Token(语言处理的最小单位)、Context(AI的短期记忆)、Prompt(指令接口)、Tool(能力扩展器)、MCP(工具生态协议)、Agent(自主智能体)和AgentSkill(专业技能封装)。文章揭示了这些概念如何共同构成AI从基础语言理解到自主决策的技术脉络,重点阐述了Token对计算成本的影响、Prompt工程的重要性、Tool如何突破AI的能力边界,以及Agent如何通过"感知-规划-执行-反思"循环完成复杂任务。最后指

jundao1997的专栏 249

企业级日志分析系统ELK之ELK概述

官方介绍Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件。

运维&陈同学的博客 2044

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ELK企业级日志分析系统,ELK部署

ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kibana三个开源工具配合使用,满足更强大的用户对日志的查询、排序、统计需求。ELK是Elasticsearch、Logstash、Kibana的缩写,这三工具组合,用于数据收集、存储、搜索和可视化分析。ELK 的核心价值是“集中化收集 + 高效检索 + 可视化分析”

sk13587280072的博客 746

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

上一篇: GFS分布式文件系统简介及部署——让存储变得更高级
下一篇: 十分钟教你看懂top命令
糖果剑客
博客等级 码龄6年 97粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值