标签归档:Neural Network

深度学习-调参和优化(二)

本文介绍Coursera-Deep Learning-Course2-Week2:Optimization algorithms的内容:深度学习的优化,主要是如何加速梯度下降。

梯度下降的优化

这部分主要介绍了三种梯度下降方法:Batch Gradient Descent, Mini-batch Gradient Descent和Stochastic Gradient Descent,这些内容已经在之前的文章(大规模机器学习)中已经解释的很清楚了,本文不再具体阐述。
先回顾下之前的梯度下降公式:
$$
\theta_{j} := \theta_{j} – \alpha \frac{1}{m}\sum_{i=1}^{m}\left ( h_{\theta}\left ( x^{(i)}\right )- y ^{(i)}\right ) x_{j}^{(i)}
$$

上面这个公式代表的是全批量的梯度下降(batch gradient descent),是梯度下降最原始的形式,也就是说梯度每下降一步都要把所有的样本数据算一遍,这个代价是非常昂贵的,如果m是百万级别的话(实际工程中很常[……]

继续阅读

深度学习-调参和优化(一)

从今天开始,我们总结Coursera深度学习第二课:Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization,主要是调参和优化,这一块儿的内容是非常重要的,里面讲解了很多深度学习应用的经验法则,非常有参考价值。今天我们主要覆盖week1的内容:Week1 Practical aspects of Deep Learning。

Setting up your Machine Learning Application

数据集的划分(Train/Dev/Test)

一般来说,完整地训练一个ML应用需要把数据集划分三块:

  • 训练集(train)
  • 交叉验证集(cross validation)
    Cross Validation又被称为Dev Set,这部分数据集用于确定最终的模型。在实际场景中,我们往往会去尝试多种不同的hyperparameters,那么如何评判这些不同hyperparameters配置的模型的性能优劣呢?我们把不同的模型放到CV上跑一边,选择性能最好的那个[……]

    继续阅读

神经网络和深度学习

引言

2017年8月8日,吴恩达正式发布了Deepleanring.ai,一个发布在Coursera上的深度学习系列课程Deep Learning Specialization,希望将人工智能时代的基础知识传播到更多人身边。网上对这门课的评价很高,算是深度学习的必备课程了,所以想入门深度学习的同学千万不要错过。但在enroll这门课之前,个人强烈建议先学完同样由Andrew Ng教的Machine Learning,这门课才是最基础的机器学习课程,里面包含了很多最基本,最重要的思想和概念。学完了这门课再来上这门深度学习会感觉比较轻松吧,整体难度并不大,所以在课程发布的前几周我就全部学完了(那时候只发布了前三课),主要是因为课程开放的前一周是免费的,所以学的非常快。但同时也很仓促,也因此没有做笔记。导致的结果就是现在你再问我这些课程到底讲了什么,我已经忘得差不多了。现在又得重新花时间去学习,这是很浪费时间的。所以在学习新知识的过程中,适当地记录和梳理是非常有必要的。从今天开始,我会把这门深度学习课程的学习笔记整理到博客里,并不会面面俱到,只会记录于我而言很重要的知识点。

Deep L[……]

继续阅读

TensorFlow训练神经网络cost一直为0

问题描述

这几天在用TensorFlow搭建一个神经网络来做一个binary classifier,搭建一个典型的神经网络的基本思路是:

  • 定义神经网络的layers(层)以及初始化每一层的参数
  • 然后迭代:
    • 前向传播(Forward propagation)
    • 计算cost(Compute cost)
    • 反向传播(Backward propagation)
    • 更新参数(Update parameters)
  • 使用训练好的参数去做预测

在训练的时候发现了一个很奇怪的现象:每一次迭代所有的cost都为0。一开始以为是参数初始化出了问题,花了好多时间在上面。后来仔细研究了一下发现是最后一层的输出函数用错了,我用的是tf.nn.softmax_cross_entropy_with_logits来计算cost。 我们知道softmax一般是用来做multiclass classifier的,也就是输出的类别要大于两个。对于一个binary classifier而言,很明显我们要用sigmoid函数也就是tf.nn.sigmoid_cross_entropy_with_logits来计算co[……]

继续阅读

使用Anaconda安装caffe

前言

网上好多文章写得很复杂(包括官方文档),其实使用Anaconda安装caffe非常简单,只需要以下几个步骤:

环境

  • 操作系统:Linux version 3.10.0(Red Hat)
  • Python版本:3.5.4
  • anaconda:1.6.5
  • conda: 4.3.30

安装步骤

  • 安装Anaconda(这个强烈推荐!)
  • 在终端敲入:conda install -c anaconda caffe

  • 选择特定的protobuf版本:conda install protobuf=3.2
    如果不输入这一句可能会报如下错误:

    ImportError: libprotobuf.so.12: cannot open shared object file: No such file or directory

使用

  • 创建一个caffe环境: conda create -n caffe python=3.5(只需创建一次)
  • 启动caffe环境:source activate caffe
  • 关闭caffe环境:source deactivate caffe
  • 启动caff[……]

    继续阅读