月度归档:2017年11月

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[……]

    继续阅读

从线性空间到再生核希尔伯特空间

线性空间(Linear Space)

线性空间也就是向量空间(Vector Space),它指的是一系列向量的集合,并且只定义了两个运算:加法和数乘。加法指的是两个向量之间的运算;而数乘指的是实数和向量的相乘(相当于缩放,scale)也就是向量长度的变化。接下来我们以一个10维的向量空间来解释加法和数乘运算:

$$
\vec{v} = (v_1,v_2,…,v_{10}) \\
\vec{w} = (w_1,w_2,…,w_{10}) \\
\vec{v} + \vec{w} =(v_1+w_1,v_2+w_2,…,v_{10}+w_{10}) \\
c \cdot \vec{v} = (c \cdot v_1,c \cdot v_2,…,c \cdot v_{10})
$$

看完这个对什么是线性空间应该一目了然了。

希尔伯特空间(Hilbert Space):

基本的线性空间只包括加法和数乘操作,在此基础上我们引入内积操作,这样就把空间升级为内积空间。根据内积我们可以定义一个范数:\(\left[……]

继续阅读

核技巧(The Kernel Trick)

引言

很多人介绍核技巧时总会扯上SVM,大概是很多人第一次碰到核技巧就是在SVM里吧。其实,核技巧是一个非常纯粹的数学方法,不应该一上来就扯上SVM。因为这个技巧不仅应用在SVM中,还有其他领域也有应用。它解决了数据映射到高维空间之后点积的计算量过于复杂的问题。很多人啰啰嗦嗦说了一大堆,把原本很简单的东西搞的很复杂,其实这玩意很好理解。

问题描述

给定两个向量\(x_i\)和\(x_j\),我们的目标是要计算他们的内积\(I = <x_i, x_j>\)。现在假设我们通过某种非线性变换:

$$
\Phi : x \rightarrow \phi(x)
$$

把他们映射到某一个高维空间中去,那么映射后的向量就变成:\(\phi(x_i)\)和\(\phi(x_j)\),映射后的内积就变成:\(I’ = <\phi(x_j),\phi(x_j)>\)。现在改如何计算映射后的内积呢?传统方法是先计算映射后的向量\(\phi(x_i)\)和\(\phi(x_[……]

继续阅读

极大似然估计(Maximum Likelihood Estimation)

在统计学中,最大似然估计,也称为最大概似估计,是用来估计一个概率模型的参数的一种方法。也就是说,在模型已知的情况下,我们通过采样样本数据,反推出最有可能导致该数据服从该模型分布的参数值,简单来说就是:模型已定,参数未知,通过采样求解模型参数。

问题描述

给定一组数据\(X=X_1,X_2,…,X_n\) ,他们的概率分布为\(D\)(参数为\(\theta\)),以及其概率密度函数\(f_D\),求解模型\(D\)的参数\(\theta\)。

求解

  • 采样
    我们从\(X\)中采样出一组数据\(x=x_1,x_2,…,x_n\),如果\(n\)足够大的话,这组数据肯定是服从分布\(D\)的。我们假设这组数据的采样是互相独立的,那么他们同时被采集到的概率(联合概率密度:joint density function)就是:

    $$
    f(x_1,x_2,…,x_n|\theta) = f(x_1|\theta) \t[……]

    继续阅读