2020-02-23 12:59:07 qq_43667130 阅读数 51
  • 三个项目玩转深度学习(附1G源码)

    从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

    609 人正在学习 去看看 钱兴会

计算机视觉学着学着,就自然而然的歪到机器学习,深度学习这一块儿了,因为单纯的图片处理是不能满足一些要求的,没学深度学习时,有时觉的它简单,因为不就按着套路来嘛。但它又不简单,因为里面涉及的知识真不是一下就可以说清楚的。

所以既然说不清楚,我这个小辣鸡就不说了,小白们也不要妄想可以一下就学会,今天只和大家谈一谈我从听说深度学习,到我第一次完成一个像样的模型训练的过程,希望可以为小白们提供参考。

第一次听说

有关机器学习,最简单的一种大概就是KNN算法了,我是在全国大学生电子设计大赛备赛时老师给我们介绍的,赛前押题时,老师给我们略微介绍了一下这个最最最简单的机器学习算法,这个算法大概就是物以类聚人以群分的原理吧,它会统计某个对象在训练样本中离它最近的K个对象,K个对象中种类数最多的那个,就被认为是这个对象的种类(就是如果某人身边K个活物里,有K-1个都是猪,那他就被判定为猪,嘿嘿)。

不过那年暑假我们并没有用上机器学习的东西,我也并没有深入研究它。

第一次开始学习

我第一次开始学习,是在大二上,我自我感觉在计算机视觉方面难以再进步了(当然不是都学会了,只是学了,没有什么项目需要我来练手,而书本上的东西,已经看烦了),便想要尝试点新的东西,就学机器学习吧。

我学机器学习是通过两本书:《机器学习实战》《统计学习方法:李航》,这两本书,前者重代码,后者重理论,而且章节目录很类似,是非常适合相互参看的。除了这两本书之外,B站上还有很多配套的教学视频,这里给大家推荐两个。

一个是位比较骚的UP主“云雨偏蓝”(好像是搬运工),全程手把手照着《机器学习实战》这本书教你写代码,链接放下面了:
https://www.bilibili.com/video/av36993857?from=search&seid=8894021963757644142
一个是位漂亮小姐姐全程露脸带你学,UP名为“菊安酱”,网站:
https://www.bilibili.com/video/av81430943from=search&seid=8894021963757644142
闷头学了有一段时间,只能说里面的数学知识是真的难,学了大概有3/4,因为学业压力便放一边了,最近又发现一个评价很高的视频,是浙江大学2017年研究生课程之机器学习,是结合《统计学习方法》将的,里面理论,数学讲的很清晰,我希望以后再有机会可以刷一遍。
https://www.bilibili.com/video/av77638697?p=61

我认为应该有怎样的基础

机器学习,深度学习很火,很多学弟学妹都很想学,但我还是希望他们能多积累些基础,而不要起步太高,否则你肯定会错失很多有意思的东西。

1:首先编程基础要有吧,我大一玩单片机时学的C语言,之后学opencv计算机视觉学的C++,而在学《机器视觉实战》时巩固了一下python,虽然我编程不咋样,但一些基本功还是有的。

我觉得如果你想很快的学好一门编程语言,还是应该刷一套教学视频,网上免费的教学视频一大把,如果你觉得讲的不好,也可以去一个平台买一门评价比较高的课程。四五十的课程贵吗?其实不贵,只是你白嫖的本性限制了你。

不过能白嫖还是白嫖的好,但当你觉得看书学不精通,看网上视频看不下去的时候,买一门课试试看。

2:其次明确个方向,机器学习,深度学习可以应用的方面很多,而你如果单学不用,是不会有什么收获的,所以你需要知道你学了是想干什么,就像我是学计算机视觉的,而它本身就是深度学习一大应用领域。

我的深度学习环境的搭建

下面说一说,学了机器学习后,是如何入坑深度学习的?

首先简述一下机器学习和深度学习这个比较容易混的概念,深度学习是机器学习的一个子集,而你常听说的神经网络是机器学习的算法,但当这个神经网络叠加了好几层变成深度神经网路的时候,它就是深度学习的算法了。你可以将深度学习理解为机器学习一个庞大的分支。

在前面我学机器学习时,都是手打python代码来实现算法,但深度学习有很多成形的,方便的框架,例如:

  • caffe
  • tensorflow
  • pytorch

这些就类似于opencv的包一样,不过配置的过程要麻烦一些,这里给大家推荐一位技术大牛的网站:
https://cuijiahua.com/

他在上面跟新有一系列的完整的教程,足以起到引领入门的作用。他有一篇文会教你如何搭建深度学习开发需要的环境。
https://cuijiahua.com/blog/2019/11/dl-14.html

这里再介绍一门被当做入门课程的课:斯坦福大学计算机课程CS231N,这个课程广受好评自然是有原因的,我看完它后入手深度学习要轻松的多。有关这个课程的PPT,视频,配套教材等等所有的我都打包放在文末的百度网盘里了,需者自取吧。

需要强调的,不论上面的网站,还是CS231N这门课程,都是使用的pytorch深度学习框架,所以下面给大家介绍一本非常好的书:
《动手学深度学习》
这本书PDF文档我也放文末云盘里了。也可以网页直达。

这本书不仅介绍了深度学习的原理,而且都附有详细的代码,而且这本书有配套的网站,网站可以相互评论探讨,网站在书里有传送门(就是原书地址)。

跟着这本书,你很快就可以写出你的第一个深度学习模型啦。如果你准备入坑深度学习了,欢迎关注我公众号【行走的机械人】,来看我的经验分享吧。

百度网盘

链接:https://pan.baidu.com/s/11_g9UNNdleD0VVV3r917NQ
提取码:yuj6

经验就分享到这里吧,我是这样一步步走来的,剩下的,就看你的啦

2017-10-16 15:15:28 Scythe666 阅读数 431
  • 三个项目玩转深度学习(附1G源码)

    从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

    609 人正在学习 去看看 钱兴会

如何开启深度学习之旅?这三大类125篇论文为你导航(附资源下载) 

如果你现在还是个深度学习的新手,那么你问的第一个问题可能是「我应该从哪篇文章开始读呢?在 G上,s准备了一套深度学习阅读清单,而且这份清单在随时更新。

项目地址:

这份清单依照下述 4 条原则建立:

从整体轮廓到细节

从过去到当代

从一般到具体领域

聚焦当下最先进技术

你会发现很多非常新但很值得一读的论文。这份清单我会持续更新。

1、深度学习的历史与基础知识

1.0 书籍

[0] Bengio, Yoshua, Ian J. Goodfellow, and Aaron Courville. 深度学习(Deep learning), An MIT Press book. (2015). (这是深度学习领域的圣经,你可以在读此书的同时阅读下面的论文)。

1.1 调查类:

[1] LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. 深度学习 (Deep learning), Nature 521.7553 (2015): 436-444. (深度学习三位大牛对各种学习模型的评价)

1.2 深度信念网络(DBN)(深度学习前夜的里程碑)

[2] Hinton, Geoffrey E., Simon Osindero, and Yee-Whye Teh. 一个关于深度信念网络的快速学习算法(A fast learning algorithm for deep belief nets), (深度学习的前夜)

[3] Hinton, Geoffrey E., and Ruslan R. Salakhutdinov. 使用神经网络降低数据的维度(Reducing the dimensionality of data with neural networks), (里程碑式的论文,展示了深度学习的可靠性)

1.3 ImageNet 的演化(深度学习从这里开始)

[4] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. 使用深度卷积神经网络进行 ImageNet 分类任务(Imagenet classification with deep convolutional neural networks)(AlexNet, 深度学习的突破)

[5] Simonyan, Karen, and Andrew Zisserman. 针对大尺度图像识别工作的的超深卷积网络(Very deep convolutional networks for large-scale image recognition) (VGGNet, 神经网络开始变得非常深!)

[6] Szegedy, Christian, et al. 更深的卷积(Going deeper with convolutions)(GoogLeNet)

[7] He, Kaiming, et al. 图像识别的深度残差学习(Deep residual learning for image recognition)(ResNet,超级超级深的深度网络!CVPR--IEEE 国际计算机视觉与模式识别会议-- 最佳论文)

1.4 语音识别的演化

[8] Hinton, Geoffrey, et al. 语音识别中深度神经网络的声学建模(Deep neural networks for acoustic modeling in speech recognition: The shared views of four research groups)(语音识别中的突破)

[9] Graves, Alex, Abdel-rahman Mohamed, and Geoffrey Hinton. 用深度循环神经网络进行语音识别(Speech recognition with deep recurrent neural networks)(RNN)

[10] Graves, Alex, and Navdeep Jaitly. 面向端到端语音识别的循环神经网络(Towards End-To-End Speech Recognition with Recurrent Neural Networks)

[11] Sak, Ha?im, et al. 语音识别中快且精准的循环神经网络声学模型(Fast and accurate recurrent neural network acoustic models for speech recognition)(语音识别系统)

[12] Amodei, Dario, et al. Deep speech 2:英语和汉语的端到端语音识别(Deep speech 2: End-to-end speech recognition in english and mandarin)(百度语音识别系统)

[13] W. Xiong, J. Droppo, X. Huang, F. Seide, M. Seltzer, A. Stolcke, D. Yu, G. Zweig,在对话语音识别中实现人类平等(Achieving Human Parity in Conversational Speech Recognition)

当你读完了上面给出的论文,你会对深度学习历史有一个基本的了解,深度学习建模的基本架构(包括了 CNN,RNN,LSTM)以及深度学习如何可以被应用于图像和语音识别问题。下面的论文会让你对深度学习方法,不同应用领域中的深度学习技术和其局限有深度认识。

2 深度学习方法

2.1 模型

[14] Hinton, Geoffrey E., et al. 通过避免特征检测器的共适应来改善神经网络(Improving neural networks by preventing co-adaptation of feature detectors)(Dropout)

[15] Srivastava, Nitish, et al. Dropout:一种避免神经网络过度拟合的简单方法(Dropout: a simple way to prevent neural networks from overfitting)

[16] Ioffe, Sergey, and Christian Szegedy. Batch normalization:通过减少内部协变量加速深度网络训练(Batch normalization: Accelerating deep network training by reducing internal covariate shift)(2015 年一篇杰出论文)

[17] Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton.层归一化(Layer normalization)(批归一化的升级版)

[18] Courbariaux, Matthieu, et al. 二值神经网络:训练神经网络的权重和激活约束到正 1 或者负 1(Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to+ 1 or?1)(新模型,快)

[19] Jaderberg, Max, et al. 使用合成梯度的解耦神经接口(Decoupled neural interfaces using synthetic gradients)(训练方法的发明,令人惊叹的文章)

[20] Chen, Tianqi, Ian Goodfellow, and Jonathon Shlens. Net2net:通过知识迁移加速学习(Net2net: Accelerating learning via knowledge transfer) (修改之前的训练网络以减少训练)

[21] Wei, Tao, et al. 网络形态(Network Morphism)(修改之前的训练网络以减少训练 epoch)

2.2 优化

[22] Sutskever, Ilya, et al. 有关深度学习中初始化与动量因子的研究(On the importance of initialization and momentum in deep learning) (动量因子优化器)

[23] Kingma, Diederik, and Jimmy Ba. Adam:随机优化的一种方法(Adam: A method for stochastic optimization)(可能是现在用的最多的一种方法)

[24] Andrychowicz, Marcin, et al. 通过梯度下降学习梯度下降(Learning to learn by gradient descent by gradient descent) (神经优化器,令人称奇的工作)

[25] Han, Song, Huizi Mao, and William J. Dally. 深度压缩:通过剪枝、量子化训练和霍夫曼代码压缩深度神经网络(Deep compression: Compressing deep neural network with pruning, trained quantization and huffman coding) (ICLR 最佳论文,来自 DeePhi 科技初创公司,加速 NN 运行的新方向)

[26] Iandola, Forrest N., et al. SqueezeNet:带有 50x 更少参数和小于 1MB 模型大小的 AlexNet-层级精确度(SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 1MB model size.) (优化 NN 的另一个新方向,来自 DeePhi 科技初创公司)

2.3 无监督学习/深度生成模型

[27] Le, Quoc V. 通过大规模无监督学习构建高级特征(Building high-level features using large scale unsupervised learning.) (里程碑,吴恩达,谷歌大脑,猫)

[28] Kingma, Diederik P., and Max Welling. 自动编码变异贝叶斯(Auto-encoding variational bayes.) (VAE)

[29] Goodfellow, Ian, et al. 生成对抗网络(Generative adversarial nets.)(GAN, 超酷的想法)

[30] Radford, Alec, Luke Metz, and Soumith Chintala. 带有深度卷曲生成对抗网络的无监督特征学习(Unsupervised representation learning with deep convolutional generative adversarial networks.)(DCGAN)

[31] Gregor, Karol, et al. DRAW:一个用于图像生成的循环神经网络(DRAW: A recurrent neural network for image generation.) (值得注意的 VAE,杰出的工作)

[32] Oord, Aaron van den, Nal Kalchbrenner, and Koray Kavukcuoglu. 像素循环神经网络(Pixel recurrent neural networks.)(像素 RNN)

[33] Oord, Aaron van den, et al. 使用像素 CNN 解码器有条件地生成图像(Conditional image generation with PixelCNN decoders.) (像素 CNN)

2.4 RNN/序列到序列模型

[34] Graves, Alex. 带有循环神经网络的生成序列(Generating sequences with recurrent neural networks.)(LSTM, 非常好的生成结果,展示了 RNN 的力量)

[35] Cho, Kyunghyun, et al. 使用 RNN 编码器-解码器学习词组表征用于统计机器翻译(Learning phrase representations using RNN encoder-decoder for statistical machine translation.) (第一个序列到序列论文)

[36] Sutskever, Ilya, Oriol Vinyals, and Quoc V. Le. 运用神经网路的序列到序列学习(Sequence to sequence learning with neural networks.」)(杰出的工作)

[37] Bahdanau, Dzmitry, KyungHyun Cho, and Yoshua Bengio. 通过共同学习来匹配和翻译神经机器翻译(Neural Machine Translation by Jointly Learning to Align and Translate.)

[38] Vinyals, Oriol, and Quoc Le. 一个神经对话模型(A neural conversational model.)(聊天机器人上的序列到序列)

2.5 神经图灵机

[39] Graves, Alex, Greg Wayne, and Ivo Danihelka. 神经图灵机器(Neural turing machines.)arXiv preprint arXiv:1410.5401 (2014). (未来计算机的基本原型)

[40] Zaremba, Wojciech, and Ilya Sutskever. 强化学习神经图灵机(Reinforcement learning neural Turing machines.)

[41] Weston, Jason, Sumit Chopra, and Antoine Bordes. 记忆网络(Memory networks.)

[42] Sukhbaatar, Sainbayar, Jason Weston, and Rob Fergus. 端到端记忆网络(End-to-end memory networks.)

[43] Vinyals, Oriol, Meire Fortunato, and Navdeep Jaitly. 指示器网络(Pointer networks.)

[44] Graves, Alex, et al. 使用带有动力外部内存的神经网络的混合计算(Hybrid computing using a neural network with dynamic external memory.)(里程碑,结合上述论文的思想)

2.6 深度强化学习

[45] Mnih, Volodymyr, et al. 使用深度强化学习玩 atari 游戏(Playing atari with deep reinforcement learning.) (第一篇以深度强化学习命名的论文)

[46] Mnih, Volodymyr, et al. 通过深度强化学习达到人类水准的控制(Human-level control through deep reinforcement learning.) (里程碑)

[47] Wang, Ziyu, Nando de Freitas, and Marc Lanctot. 用于深度强化学习的决斗网络架构(Dueling network architectures for deep reinforcement learning.) (ICLR 最佳论文,伟大的想法 )

[48] Mnih, Volodymyr, et al. 用于深度强化学习的异步方法(Asynchronous methods for deep reinforcement learning.) (当前最先进的方法)

[49] Lillicrap, Timothy P., et al. 运用深度强化学习进行持续控制(Continuous control with deep reinforcement learning.) (DDPG)

[50] Gu, Shixiang, et al. 带有模型加速的持续深层 Q-学习(Continuous Deep Q-Learning with Model-based Acceleration.)

[51] Schulman, John, et al. 信赖域策略优化(Trust region policy optimization.) (TRPO)

[52] Silver, David, et al. 使用深度神经网络和树搜索掌握围棋游戏(Mastering the game of Go with deep neural networks and tree search.) (阿尔法狗)

2.7 深度迁移学习/终身学习/尤其对于 RL

[53] Bengio, Yoshua. 表征无监督和迁移学习的深度学习(Deep Learning of Representations for Unsupervised and Transfer Learning.) (一个教程)

[54] Silver, Daniel L., Qiang Yang, and Lianghao Li. 终身机器学习系统:超越学习算法(Lifelong Machine Learning Systems: Beyond Learning Algorithms.) (一个关于终生学习的简要讨论)

[55] Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean. 提取神经网络中的知识(Distilling the knowledge in a neural network.) (教父的工作)

[56] Rusu, Andrei A., et al. 策略提取(Policy distillation.) (RL 领域)

[57] Parisotto, Emilio, Jimmy Lei Ba, and Ruslan Salakhutdinov. 演员模仿:深度多任务和迁移强化学习(Actor-mimic: Deep multitask and transfer reinforcement learning.) (RL 领域)

[58] Rusu, Andrei A., et al. 渐进神经网络(Progressive neural networks.)(杰出的工作,一项全新的工作)

2.8 一次性深度学习

[59] Lake, Brenden M., Ruslan Salakhutdinov, and Joshua B. Tenenbaum. 通过概率程序归纳达到人类水准的概念学习(Human-level concept learning through probabilistic program induction.)(不是深度学习,但是值得阅读)

[60] Koch, Gregory, Richard Zemel, and Ruslan Salakhutdinov. 用于一次图像识别的孪生神经网络(Siamese Neural Networks for One-shot Image Recognition.)

[61] Santoro, Adam, et al. 用记忆增强神经网络进行一次性学习(One-shot Learning with Memory-Augmented Neural Networks ) (一个一次性学习的基本步骤)

[62] Vinyals, Oriol, et al. 用于一次性学习的匹配网络(Matching Networks for One Shot Learning.)

[63] Hariharan, Bharath, and Ross Girshick. 少量视觉物体识别(Low-shot visual object recognition.)(走向大数据的一步)

3 应用

3.1 NLP(自然语言处理)

[1] Antoine Bordes, et al. 开放文本语义分析的词和意义表征的联合学习(Joint Learning of Words and Meaning Representations for Open-Text Semantic Parsing.)

[2] Mikolov, et al. 词和短语及其组合性的分布式表征(Distributed representations of words and phrases and their compositionality.) (word2vec)

[3] Sutskever, et al. 运用神经网络的序列到序列学习(Sequence to sequence learning with neural networks.)

[4] Ankit Kumar, et al. 问我一切:动态记忆网络用于自然语言处理(Ask Me Anything: Dynamic Memory Networks for Natural Language Processing.)

[5] Yoon Kim, et al. 角色意识的神经语言模型(Character-Aware Neural Language Models.)

[6] Jason Weston, et al. 走向人工智能-完成问题回答:一组前提玩具任务(Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks.) (bAbI 任务)

[7] Karl Moritz Hermann, et al. 教机器阅读和理解(Teaching Machines to Read and Comprehend.)(CNN/每日邮件完形风格问题)

[8] Alexis Conneau, et al. 非常深度卷曲网络用于自然语言处理(Very Deep Convolutional Networks for Natural Language Processing.) (在文本分类中当前最好的)

[9] Armand Joulin, et al. 诡计包用于有效文本分类(Bag of Tricks for Efficient Text Classification.)(比最好的差一点,但快很多)

2020-03-14 13:49:46 weixin_39025679 阅读数 44
  • 三个项目玩转深度学习(附1G源码)

    从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

    609 人正在学习 去看看 钱兴会

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

1 Keras 序列模型

1.1 添加网络层方法

方法一:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

方法二

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()#实例化序列模型
model.add(Dense(32, input_dim=784))#添加网络层
model.add(Activation('relu'))#添加激活函数

个人喜欢方法二,逐步添加网络层

1.2 输入shape

在网络层输入的第一层需要输入shape
下列两种方法等效

model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, input_dim=784))

1.3 合并Compilation

在训练开始之前需要配置学习过程的参数使用compile(optimize,loss, metrics)

  • optimize 优化器名称
  • loss 损失函数
  • metrics 评估方法

1.3.1 例子

# For a multi-class classification problem
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# For a binary classification problem
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# For a mean squared error regression problem
model.compile(optimizer='rmsprop',
              loss='mse')

# For custom metrics
import keras.backend as K

def mean_pred(y_true, y_pred):
    return K.mean(y_pred)

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy', mean_pred])

1.4 训练过程Training

kesra是基于Numpy数组

1.4.1对单一输入二分类深度学习框架

1.4.1.1 初始化训练模型参数

# For a single-input model with 2 classes (binary classification):

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

1.4.1.2 创建(加载)数据

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

1.4.1.3开始训练

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)

1.4.2 对单一输入多分类分类深度学习框架(步骤与上面一致)

# For a single-input model with 10 classes (categorical classification):

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(10, size=(1000, 1))

# Convert labels to categorical one-hot encoding
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, one_hot_labels, epochs=10, batch_size=32)

2 一般深度学习训练过程框架

2.1 多层感知机对多分类的softmax 分类函数

2.1.1 导入包

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

2.1.2 加载数据

# Generate dummy data
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

2.1.3 实例化模型并添加网络层

model = Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

2.1.4 整合模型(创建损失函数、优化器、评估函数)

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])

2.1.5 开始训练

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)

2.1.6 评估训练结果

score = model.evaluate(x_test, y_test, batch_size=128)

2.2 多层感知机对二分类

这里不做解释了(步骤与上述一致)

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout

# Generate dummy data
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))

model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)

2.3 VGG-like convnet:可视化几何群网络

百度百科解释

https://baike.baidu.com/item/VGG%20%E6%A8%A1%E5%9E%8B/22689655?fr=aladdin

2.3.1 导入包

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD

2.3.2 创建数据

# Generate dummy data
x_train = np.random.random((100, 100, 100, 3))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
x_test = np.random.random((20, 100, 100, 3))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(20, 1)), num_classes=10)

2.3.3 实例化模型

model = Sequential()

2.3.4 添加网络层

# input: 100x100 images with 3 channels -> (100, 100, 3) tensors.
# this applies 32 convolution filters of size 3x3 each.
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

2.3.5 整合模型(创建损失函数、优化器、评估函数)

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)

2.3.6 训练模型

model.fit(x_train, y_train, batch_size=32, epochs=10)

2.3.7 评估模型

score = model.evaluate(x_test, y_test, batch_size=32)

2.4 使用LSTM(长短期记忆网络)进行序列分类

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.layers import Embedding
from keras.layers import LSTM

max_features = 1024

model = Sequential()
model.add(Embedding(max_features, output_dim=256))
model.add(LSTM(128))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=16, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=16)

2.5 使用1-D卷积进行序列分类

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.layers import Embedding
from keras.layers import Conv1D, GlobalAveragePooling1D, MaxPooling1D

seq_length = 64

model = Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(seq_length, 100)))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=16, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=16)

2.6 使用LSTM堆进行序列分类

在这里插入图片描述

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np

data_dim = 16
timesteps = 8
num_classes = 10

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))

# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))

model.fit(x_train, y_train,
          batch_size=64, epochs=5,
          validation_data=(x_val, y_val))

2.7 Same stacked LSTM model, rendered “stateful”

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np

data_dim = 16
timesteps = 8
num_classes = 10
batch_size = 32

# Expected input batch shape: (batch_size, timesteps, data_dim)
# Note that we have to provide the full batch_input_shape since the network is stateful.
# the sample of index i in batch k is the follow-up for the sample i in batch k-1.
model = Sequential()
model.add(LSTM(32, return_sequences=True, stateful=True,
               batch_input_shape=(batch_size, timesteps, data_dim)))
model.add(LSTM(32, return_sequences=True, stateful=True))
model.add(LSTM(32, stateful=True))
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((batch_size * 10, timesteps, data_dim))
y_train = np.random.random((batch_size * 10, num_classes))

# Generate dummy validation data
x_val = np.random.random((batch_size * 3, timesteps, data_dim))
y_val = np.random.random((batch_size * 3, num_classes))

model.fit(x_train, y_train,
          batch_size=batch_size, epochs=5, shuffle=False,
          validation_data=(x_val, y_val))

3 源网址

https://keras.io/getting-started/sequential-model-guide/

如果您喜欢我的文章,感觉对您有帮助,不如请问喝杯奶茶,我不怕胖的哦嘻嘻嘻,比心!
在这里插入图片描述

2015-06-11 10:44:46 dcxhun3 阅读数 855
  • 三个项目玩转深度学习(附1G源码)

    从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

    609 人正在学习 去看看 钱兴会

作为一枚对机器学习有基础,但对深度学习一无所知的DL-er。就这样在深度学习的浪潮下,走上了Dl的探索道路。

现在就开启学习记录之旅。。。。

看到下面这些推荐,知道我我入门的角度是对的,因为这些都是热推荐,继续caffe和UFLDL----->go!

From知呼:http://www.zhihu.com/question/26006703

我入门CV时清华的朋友给的资料,帮助十分大!十分适合新手入门!
我是本科EE入门的,所以应该没有底子比我差的了。

0、Andrew Ng的机器学习前四章的内容(线性回归与逻辑回归)
英文能力足够推荐英文版:openclassroom.stanford.edu
(中文版对应网易公开课v.163.com/special/openc)

1、CMU Advanced Introduction to Machine Learning PPT: cs.cmu.edu/~epxing/Clas

这是一门Machine Learning课程中讲到CNN的部分

2、CAFFE: caffe.berkeleyvision.org

CAFFE是一个常用的deep learning的软件工具,其页面上有deep learning的tutorial材料,同时想要深入了解具体实现的话可以直接阅读源代码

3. UFLDL: ufldl.stanford.edu/wiki

这是我做computer vision的同学推荐的学习deep learning在CV中应用的tutorial

 

 

2017-07-05 19:49:07 jiaxiaoit 阅读数 448
  • 三个项目玩转深度学习(附1G源码)

    从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

    609 人正在学习 去看看 钱兴会

深度学习–caffe试水

深度学习是机器学习研究中的一个新领域,动机是什么?
模拟人脑进行分析学习
目前有很多的深度学习框架,我就先试一试caffe的水,看看水到底有多深。。。
自2006年Hinton和他的学生在science上发表了一篇开启深度学习研究的文章—《Reducing the Dimensionality of Data with Neural Networks》,深度学习火得一发不可收拾。。。
深度学习算法采用大量的卷积层,利用空间相对关系来减少参数数目以提高训练性能
从生物意义上的神经网络模型到人工神经网络模型,bp神经网络,卷积神经网络再到深度学习网络的主流框架是如何一步一步发展的呢

生物意义上的神经网络模型

视觉系统的信息处理,可视皮层是分级的,关键词:抽象和迭代
从原始信号,做低级抽象,逐渐向高级抽象迭代

人工神经网络

1.人工神经元模型
三要素:
一组连接
一个求和单元
一个非线性激活函数
2.BP神经网络
正向传播:
输入层到隐层(k=1,2,...,p)
zk=f1(ni=0vkixi)
隐层到输出层(j=1,2,...,m)
yj=f2(pk=0wjkzk)
f1f2是单调上升函数,而且必须是有界函数,因为细胞传递的信号不能是无线增加的,必须有最大值!!!
根据上述公式完成了n维空间向量对m维空间的近似映射(在我理解是对原始数据做了非线性映射,投影到新的空间上)
反向传播:
首先以何种标准进行反向调整网络呢?
我们需要定义误差函数来约束我们的网络,也就是我们的网络想要得到的东西是什么呢?
我们可以使用平方误差也可以根据我们具体的任务来定义损失函数
在这里我们以平方误差为例:
v个样本的误差Ev:
Ev=12mj=1(tvjyvj)2
其中,tvj是我们所期望的输出
对于P个样本,全局误差为
E=12Pv=1mj=1(tvjyvj)2=Pv=1Ev)
3.卷积神经网络
卷积神经网络的权重共享网络结构是卷积神经网络的特色
可以对平移、比例缩放、倾斜或者是共他形式的变形具有高度不变性!!!
话不多说,直接来感受一下经典的网络模型

<一>LeNet网络

我们从LeNet网络模型开始,lenet-5包含输入层在内总共八层,每一层都包含多个参数(权重)
input->convolutions->subsampling->convolutions->subsampling->full connection->full connection->gaussian connections
第一层:输入层,图像大小为32*32
第二层:卷积层,6个feature map,5*5大小的卷积核,每个feature map为(32-5+1)*(32-5+1),即6*28*28
通过卷积运算,使原始信号特征增强,并且降低噪音,不同的卷积核能够提取到不同的特征
第三层:下采样层,2*2的下采样,总共有6*14*14个feature map
下采样层的池化方式通常有两种:一种是选择pooling窗口中的最大值作为采样值,即最大值池化;二是将pooling窗口中的所有值相加取平均值作为采样值,即均值池化
第四层:卷积层,总共16个feature map,分别是上一层的6个feature map的组合
第五层:有一个下采样层,下采样层的目的是为了降低网络训练参数以及模型的过拟合程度
第六层:有一个卷积层,总共120个feature map,每个map都是上一层16个feature map的组合
第七层:全连接层,正切函数
xi=f(ai)=Atanh(sai)
第八层:输出层也是全连接层,一共10个节点,分别代表数字0-9,
yi=j(xjwij)2
我们在mnist数据集上对该模型进行了学习
下面是训练过程:
首先是准备训练、测试数据
执行./data/mnist/get_mnist.sh
该脚本会从网址上下载样本库并进行解压缩
之后将下载的数据集转化成caffe能够处理的数据格式lmdb
执行./examples/mnist/create_minist.sh
生成模型所需的数据之后就是训练模型了
LeNet的网络定义在lenet_train_test.prototxt文件中
训练网络,我们需要运行./examples/mnist/train_lenet.sh
该脚本执行的内容其实是:
./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt
solver.prototxt是参数配置文件
训练开始:
train
训练完成:
finished
测试:
执行example里自带的test
./build/tools/caffe.bin test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel
test
打印出loss和accuracy曲线:
由于我是在服务器上跑的,没有图形界面,所以无法plot图,后续我在自己的电脑上画一个吧
不过方法的话 是可行的 小伙伴已经亲测过了
我们想要打印训练日志的话,可以使用caffe自带的log脚本,在train.sh里将保存log的脚本加入,
log
这样便可以生成log日志,使用caffe中自带的tools/extra/parse_log.sh以及plot_traing_log.py.example来plot各种loss和accuracy曲线

ok!先到这里吧,后续再更新。。。

没有更多推荐了,返回首页