22、多云环境的安全与管理:策略、工具与实践

多云环境的安全与管理:策略、工具与实践

1. 多云环境的安全问题

云计算是利用远程服务器互联网络进行信息存储、管理和处理等操作的计算方式。如今,企业采用集成架构运用多种云计算服务和技术,将不同的云部署和交付模型整合为一体以执行业务流程。然而,随着这种做法的普及,也出现了一些安全问题。

1.1 安全风险类型

多云环境中的安全问题主要与基于网络的安全风险、可用性、机密性威胁和完整性风险相关。常见的攻击事件包括拒绝服务(DoS)攻击、恶意软件攻击、消息/媒体篡改攻击、仿冒和网络钓鱼攻击、中间人攻击以及窃听攻击等。

1.2 安全措施与步骤

为了确保多云环境的安全,企业需要采取以下措施:
- 优先实现可见性 :企业应确保对所有云实例有全面的可见性,可采用基于行为的监控来增强可见性,这样能突出异常修改和恶意活动。
- 遵循最佳实践 :云安全团队需分析和理解与多云环境中各实体相关的最佳实践。例如,对于多云环境中的NoSQL数据库,应满足合规要求,安装高级访问控制和认证措施,提升数据库安全性。
- 灵活且安全的治理 :治理是组织的关键要素,在多云环境中,身份管理、调度活动和资源分配等流程必须得到安全治理。
- 静态数据加密 :企业通常会对传输中的信息进行加密,但往往忽视了静态数据的加密。因此,使用高级加密算法对静态信息进行加密非常必要。
- 先进的共享责任模型 :资源共享是云计算的主要特征,在多云环境中更为突出。每个实体都应确保充分履行云的共享责任模型,角色和责任的分配应透明且易于执行。
- 基于网络的安全控制 :多云环境中的大多数安全问题以网络为主要威胁载体,因此需要实施自动化和先进的网络安全工具和控制措施,如网络监控工具、入侵检测系统、入侵预防系统、反恶意软件工具和反拒绝服务工具等。

1.3 安全措施总结

安全措施 具体内容
优先实现可见性 全面监控云实例,基于行为监控增强可见性
遵循最佳实践 分析各实体最佳实践,如NoSQL数据库安全措施
灵活且安全的治理 安全治理身份管理、调度和资源分配等流程
静态数据加密 使用高级算法加密静态数据
先进的共享责任模型 明确各实体责任,确保透明执行
基于网络的安全控制 实施自动化网络安全工具

2. 十二因素多云DevOps管道

CI/CD DevOps管道从源代码到监控包含十二个步骤,以下是详细介绍:

2.1 源代码管理

开发者提交与微服务、配置文件或基础设施即代码相关的代码后,根据组织策略,合并到构建分支将触发构建。

2.2 构建管理

管道将应用的整个生命周期定义为代码,可通过Jenkins或Spinnaker管道实现。Spinnaker是云无关的,基于YAML文件,应用的所有阶段可写在JenkinsFile中自动执行。可通过多个Jenkins主节点和执行器池高效管理,也可使用DC OS和Marathon扩展Jenkins,根据需求动态创建或销毁Jenkins代理。

2.3 质量管理

SonarQube可分析20多种不同语言,分析结果包括质量指标和违反编码规则的问题。

2.4 仓库管理

Jenkins构建的工件将推送到仓库管理器,并可根据环境进行标记。

2.5 Docker注册表

CI服务器上运行的Docker守护进程将根据DockerFile构建镜像并推送到Docker注册表,如DockerHub、AWS ECR、Google Container Registry等。

2.6 部署管理

工件将从开发环境到生产环境依次通过各个阶段,需确保按组织标准通过每个阶段的关卡,并使用适当的标签升级到更高环境。

2.7 云基础设施构建

对于单一云提供商,可使用相应的模板创建基础设施,如AWS的Cloud Formation Template、Azure的Azure Resource Manager等。Terraform是云无关的,可管理多个提供商,处理跨云依赖关系,简化基础设施管理和编排。

2.8 容器配置

建议所有环境使用相同的容器,可通过以下方式进行配置:
- 通过环境变量动态设置应用配置。
- 通过Docker Volumes映射配置文件。
- 将配置烘焙到容器中。
- 从配置服务器获取配置。

2.9 测试自动化

快速的用户验收测试(UAT)反馈周期对持续交付至关重要,自动化测试驱动开发(ATDD)是建立快速反馈循环的必要条件。可使用Mockito、Cucumber或Selenium Grid进行ATDD。

2.10 容器集群管理

使用微服务架构可轻松部署和运行容器,容器比虚拟机更轻量级,能根据需求进行扩展或缩减。编排工具应具备以下能力:
- 供应
- 监控
- 服务发现
- 滚动升级和回滚
- 配置即文本
- 放置和可扩展性策略
- 管理

常见的云编排工具包括Kubernetes、Docker Swarm、Mesos + Marathon等。

2.11 日志管理

市场上有多种日志管理工具,Docker也为其引入了插件。常见的日志管理驱动包括Fluentd、Journald、Splunk、Syslog Driver和Gelf等。完整的日志管理解决方案还需要日志解析器、日志索引、可视化和警报等工具。

2.12 监控管理

代理从系统和应用中收集指标和事件,可在容器中安装至少一个代理,生成并发布指标,用户可查看容器数量、CPU使用情况等信息。

graph LR
    A[源代码管理] --> B[构建管理]
    B --> C[质量管理]
    C --> D[仓库管理]
    D --> E[Docker注册表]
    E --> F[部署管理]
    F --> G[云基础设施构建]
    G --> H[容器配置]
    H --> I[测试自动化]
    I --> J[容器集群管理]
    J --> K[日志管理]
    K --> L[监控管理]

3. 多云环境的出现与发展

3.1 数字化时代的背景

数字化技术和工具日益普及,全球各国都在积极吸收数字化进程,企业也在积极进行数字化转型。数字化时代涉及众多创新、颠覆性和变革性技术,同时需要更精细的流程和合适的架构。

3.2 多云环境的兴起

云计算被视为实现数字化转型的重要技术,随着强大的云实现技术和工具的出现,云时代已积极开启。企业、IT团队和云服务提供商合作创建各种云环境,市场分析师预测到2020年约80%的业务应用将迁移到云环境。

3.3 混合IT与混合云

全球企业将自身IT环境与一个或多个公共云相结合,形成混合IT模式,带来了敏捷性、灵活性和创新,有助于实现关键业务目标,如提高客户参与度、创造新的盈利增长点、降低风险和运营成本等。混合云则是将私有云与一个或多个公共云集成,具有诸多战略优势。

3.4 多云时代的趋势

分布式计算模型被认为是未来知识服务和智能应用的可行模式,随着标准化云集成和编排产品及平台的出现,涉及多个地理分布和不同云的混合云时代即将到来,多云环境在数字化转型中的作用将越来越重要。

4. 多云管理平台解决方案

4.1 多云环境的管理挑战

多云架构通常包括私有云和一个或多个公共云,云环境中包含大量服务器、虚拟机和容器,管理复杂度不断增加。传统IT管理策略和工具不适用于虚拟化和容器化的云环境,应用与基础设施不再紧密耦合,虚拟机和容器可频繁创建和销毁。

4.2 管理需求与解决方案

企业期望从IT中获得更多价值,云计算能满足云系统和服务的非功能需求。运营团队需要使用统一和自动化工具主动监控基础设施组件、资源和应用,对监控数据进行分析以获取可操作的见解,及时采取纠正措施。成熟的运营和日志分析任务可确保云环境的正常运行,工具支持、基于策略、以模板为中心和流程优化的自动化是管理复杂多云环境的未来方向。

4.3 云管理平台(CMP)

根据Gartner报告,CMP通常满足以下五个要求:服务请求管理、供应、编排和自动化、治理和政策、监控和计量以及多云代理。CMP的关键价值在于实现多云管理的统一策略应用、编排和自动化,其好处包括:
- 协助云服务订阅者选择合适的提供商和应用。
- 通过抽象云提供商的专有API,提供跨多个云提供商的单一视图和实现。
- 减少对任何云基础设施服务提供商的锁定。

4.4 选择CMP的考虑因素

组织在制定多云策略时,应考虑CMP的自动化、监控和分析的深度和广度,以及报告引擎、可视化、查询语言和关联分析的可用性。复杂的云环境需要强大的发现、依赖感知、预测分析和基于角色的见解,CMP应能提供快速价值,同时允许深入检查和自定义查询。组织还应考虑CMP对业务的价值,如是否能支持开发人员和业务分析师访问资源、支持DevOps以及提供业务绩效和生产力的见解。

graph LR
    A[多云环境管理挑战] --> B[管理需求与解决方案]
    B --> C[云管理平台(CMP)]
    C --> D[选择CMP的考虑因素]

综上所述,多云环境在提升企业业务性能的同时,也带来了安全和管理方面的挑战。企业需要采取有效的安全措施,遵循十二因素多云DevOps管道进行开发和部署,并选择合适的云管理平台来应对这些挑战,以实现数字化转型的目标。

5. 多云管理的未来展望

5.1 技术趋势

随着技术的不断发展,多云管理将迎来更多的创新。人工智能和机器学习技术将在多云环境中发挥更大的作用,例如通过智能分析监控数据,预测潜在的安全威胁和性能问题,提前采取措施进行防范。自动化技术也将进一步提升,实现更多复杂任务的自动执行,减少人工干预,提高管理效率。

5.2 市场发展

多云管理市场将持续增长,越来越多的企业将采用多云策略。云服务提供商也将不断完善其多云管理平台,提供更丰富的功能和更好的用户体验。同时,市场竞争将促使企业不断创新,推动多云管理技术的发展。

5.3 面临的挑战

尽管多云管理带来了诸多好处,但也面临一些挑战。例如,不同云提供商之间的兼容性问题可能会导致管理难度增加;数据隐私和安全问题仍然是企业关注的重点,需要不断加强安全措施;以及人才短缺问题,企业需要培养和吸引更多具备多云管理技能的专业人才。

6. 总结与建议

6.1 总结

多云环境为企业带来了更高的灵活性、可扩展性和成本效益,但也带来了安全和管理方面的挑战。通过采取有效的安全措施,如优先实现可见性、遵循最佳实践、进行数据加密等,可以降低安全风险。遵循十二因素多云DevOps管道进行开发和部署,可以提高开发效率和质量。选择合适的云管理平台(CMP),可以帮助企业更好地管理多云环境,实现统一的策略应用和自动化管理。

6.2 建议

  • 安全方面 :企业应建立完善的安全体系,定期进行安全评估和漏洞修复。加强员工的安全意识培训,避免因人为疏忽导致的安全问题。
  • DevOps方面 :持续优化DevOps流程,提高团队之间的协作效率。加强自动化测试和监控,及时发现和解决问题。
  • CMP选择方面 :在选择CMP时,应充分考虑企业的实际需求和发展战略。评估CMP的功能、性能、安全性和可扩展性等方面,选择最适合企业的平台。

以下是一个总结表格,展示了本文的主要内容:
| 主题 | 主要内容 |
| — | — |
| 多云环境安全 | 识别安全风险,采取多种安全措施保障安全 |
| 十二因素多云DevOps管道 | 涵盖从源代码管理到监控的十二个步骤 |
| 多云环境发展 | 数字化背景下,混合IT和混合云兴起,多云时代趋势明显 |
| 多云管理平台解决方案 | 应对管理挑战,CMP满足多种需求,选择时需考虑多方面因素 |
| 未来展望 | 技术创新、市场增长,但面临兼容性、安全和人才等挑战 |
| 总结与建议 | 总结要点,从安全、DevOps和CMP选择方面给出建议 |

graph LR
    A[多云环境安全] --> B[十二因素多云DevOps管道]
    B --> C[多云环境发展]
    C --> D[多云管理平台解决方案]
    D --> E[未来展望]
    E --> F[总结与建议]

在当今数字化时代,企业要想在激烈的市场竞争中脱颖而出,就必须充分利用多云环境的优势,同时有效应对安全和管理挑战。通过本文介绍的方法和策略,企业可以更好地实现多云环境的安全与高效管理,推动数字化转型的顺利进行。

相关推荐

多云安全博弈:5大防护策略,打造无懈可击的云端盾牌?

多云环境下的安全是一场持续的攻防战,需要细腻的风险感知与迅速的应急响应。通过上述最佳实践的实施,企业不仅能够有效识别并管理风险,还能在遭遇威胁时迅速恢复,确保业务连续性。记住,安全不仅是技术部署,更是文化与策略的融合。在这片多云的天空下,让我们的守护如同不灭的星辰,照亮每一段数据旅程。身处多云的蓝天之下,企业享受着灵活性与高效的同时,也面临着安全威胁的乌云密布。本文,我们将深入探讨多云环境下的安全挑战,揭示风险管控的黄金法则,并通过实战代码演示如何构建应急响应机制,让您的云端之旅既安心又高效。

java专栏 747

22、云环境监控与许可证管理全解析

本文深入解析了云环境中的监控与许可证管理两大关键领域。首先,探讨了监控在云环境中的重要性,强调了端到端监控和单窗格视图工具(如ServiceNow和BMC Helix)的应用。其次,详细介绍了云环境中的许可证管理,包括不同类型的许可证协议、软件许可证以及管理挑战,并提出了使用软件资产管理(SAM)工具的重要性。最后,分析了监控与许可证管理之间的关联,提出了综合建议,帮助企业实现高效、合规、成本可控的云运营体系。

yyy34的博客 57

22、云安全态势管理(CSPM)仪表盘全解析

本文详细解析了云安全态势管理(CSPM)中各类关键仪表盘的功能与应用,包括风险接受与例外管理、合规仪表盘、库存仪表盘、身份仪表盘、网络安全仪表盘、漏洞仪表盘以及警报和事件仪表盘。通过这些仪表盘的协同作用,组织可以全面监控和管理云环境的安全与合规状态。文章还探讨了如何选择合适的CSPM工具,并展望了未来的发展趋势,为构建强大的云安全防线提供了指导。

go5gopher的博客 101

RK3576的ISP和VPSS图像处理能力实测:对比海思方案能做什么?

本文深度评测了RK3576芯片的ISP和VPSS图像处理能力,并与海思方案进行对比。测试显示,RK3576在MIPI接口灵活性、多路视频支持、HDR动态范围和降噪效果等方面表现优异,特别适合智能视觉和安防监控应用。通过实测数据展示了其在低照度、高动态范围等复杂场景下的卓越性能。

weixin_42713608的博客 265

阿里云导出的镜像raw转换成vmdk格式工具

阿里云导出的镜像raw转换成vmdk格式工具 1.安装java环境,安装教程不介绍了 2.raw2vmdk软件下载: 在我的链接里面: 3.使用 打开cmd.bat软件: java -jar raw2vmdk.jar (原镜像)C:\\images\\raw\\disk.img (转换的镜像)D:\\images\\vmdk\\disk.vmdk 4.vmware打开vmdk文件 ...

3845

MATLABGUI读取文件并将路径显示在文本框中

MATLABGUI读取文件并将路径显示在文本框中

m0_50305149的博客 2650

光模块MCU开发全解析:从架构原理到固件调试实战

在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。

weixin_29192365的博客 366

第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)

由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。

一只大采集~ 5283

STM32CubeIDE开发环境搭建与GPIO控制实战

嵌入式开发中,MCU开发环境构建是软硬件协同的起点,其核心在于工具链选型、外设抽象层级与调试可靠性。HAL库作为ST官方标准硬件抽象层,通过统一接口屏蔽芯片差异,显著提升工程可移植性;而STM32CubeIDE则以图形化配置+自动生成代码的方式,实现‘配置即代码’的确定性开发范式。该组合在教学验证、原型迭代和中小规模量产中具备高性价比技术价值,广泛应用于智能传感、工业HMI及IoT终端等场景。本文聚焦STM32CubeIDE 1.15.0环境部署、MyST账户与固件包管理、ST-LINK驱动校验,以及基于H

weixin_33531560的博客 81

UE5实现建筑剖切效果

UE5实现建筑剖切效果

专注GIS开发 8464

FFmpeg + Qt 实现摄像头采集与 MP3 背景音乐 RTSP 推流

在直播或视频监控场景中,我们经常需要将摄像头画面与背景音乐混合后推送到 RTSP 服务器。本文将详细介绍如何使用Qt框架结合摄像头实时采集(Windows 下使用dshow,Linux 使用v4l2视频预览(显示为 QImage)视频 H.264 编码 + RTSP 推流从 MP3 文件读取音频,重采样为 AAC 编码并推流循环播放音频文件解决中文文件路径打开失败的问题文章将剖析每个技术环节的关键代码,并给出完整的类实现。

weixin_45397344的博客 504

计算机控制技术及应用

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

VB摄像头监控

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

上一篇: 1、机器学习:从垃圾邮件过滤看核心要素与应用
下一篇: 8、自我主权身份(SSI)应用场景解析
vim8coder
博客等级 码龄1天 0粉丝 1693原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值