模型实现代码,关键是train函数和predict函数,都很容易。

#include <iostream>
#include <string>
#include <math.h>
#include "LogisticRegression.h"
using namespace std; LogisticRegression::LogisticRegression(
int size, // N
int in, // n_in
int out // n_out
)
{
N = size;
n_in = in;
n_out = out; // initialize W, b
// W[n_out][n_in], b[n_out]
W = new double*[n_out];
for(int i=0; i<n_out; i++)
W[i] = new double[n_in];
b = new double[n_out]; for(int i=0; i<n_out; i++)
{
for(int j=0; j<n_in; j++)
{
W[i][j] = 0;
}
b[i] = 0;
}
} LogisticRegression::~LogisticRegression()
{
for(int i=0; i<n_out; i++)
delete[] W[i];
delete[] W;
delete[] b;
} void LogisticRegression::train (
int *x, // the input from input nodes in training set
int *y, // the output from output nodes in training set
double lr // the learning rate
)
{
// the probability of P(y|x)
double *p_y_given_x = new double[n_out];
// the tmp variable which is not necessary being an array
double *dy = new double[n_out]; // step 1: calculate the output of softmax given input
for(int i=0; i<n_out; i++)
{
// initialize
p_y_given_x[i] = 0;
for(int j=0; j<n_in; j++)
{
// the weight of networks
p_y_given_x[i] += W[i][j] * x[j];
}
// the bias
p_y_given_x[i] += b[i];
}
// the softmax value
softmax(p_y_given_x); // step 2: update the weight of networks
// w_new = w_old + learningRate * differential (导数)
// = w_old + learningRate * x (1{y_i=y} - p_yi_given_x)
// = w_old + learningRate * x * (y - p_y_given_x)
for(int i=0; i<n_out; i++)
{
dy[i] = y[i] - p_y_given_x[i];
for(int j=0; j<n_in; j++)
{
W[i][j] += lr * dy[i] * x[j] / N;
}
b[i] += lr * dy[i] / N;
}
delete[] p_y_given_x;
delete[] dy;
} void LogisticRegression::softmax (double *x)
{
double max = 0.0;
double sum = 0.0; // step1: get the max in the X vector
for(int i=0; i<n_out; i++)
if(max < x[i])
max = x[i];
// step 2: normalization and softmax
// normalize -- 'x[i]-max', it's not necessary in traditional LR.
// I wonder why it appears here?
for(int i=0; i<n_out; i++)
{
x[i] = exp(x[i] - max);
sum += x[i];
}
for(int i=0; i<n_out; i++)
x[i] /= sum;
} void LogisticRegression::predict(
int *x, // the input from input nodes in testing set
double *y // the calculated softmax probability
)
{
// get the softmax output value given the current networks
for(int i=0; i<n_out; i++)
{
y[i] = 0;
for(int j=0; j<n_in; j++)
{
y[i] += W[i][j] * x[j];
}
y[i] += b[i];
} softmax(y);
}

【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.cpp的更多相关文章

  1. 【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.h

    继续看yusugomori的代码,看逻辑回归.在DBN(Deep Blief Network)中,下面几层是RBM,最上层就是LR了.关于回归.二类回归.以及逻辑回归,资料就是前面转的几篇.套路就是设 ...

  2. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h

    DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...

  3. 【deep learning学习笔记】注释yusugomori的RBM代码 --- 头文件

    百度了半天yusugomori,也不知道他是谁.不过这位老兄写了deep learning的代码,包括RBM.逻辑回归.DBN.autoencoder等,实现语言包括c.c++.java.python ...

  4. [置顶] Deep Learning 学习笔记

    一.文章来由 好久没写原创博客了,一直处于学习新知识的阶段.来新加坡也有一个星期,搞定签证.入学等杂事之后,今天上午与导师确定了接下来的研究任务,我平时基本也是把博客当作联机版的云笔记~~如果有写的不 ...

  5. Deep Learning 学习笔记(8):自编码器( Autoencoders )

    之前的笔记,算不上是 Deep Learning, 只是为理解Deep Learning 而需要学习的基础知识, 从下面开始,我会把我学习UFDL的笔记写出来 #主要是给自己用的,所以其他人不一定看得 ...

  6. 【deep learning学习笔记】Recommending music on Spotify with deep learning

    主要内容: Spotify是个类似酷我音乐的音乐站点.做个性化音乐推荐和音乐消费.作者利用deep learning结合协同过滤来做音乐推荐. 详细内容: 1. 协同过滤 基本原理:某两个用户听的歌曲 ...

  7. Neural Networks and Deep Learning学习笔记ch1 - 神经网络

    近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...

  8. paper 149:Deep Learning 学习笔记(一)

     1. 直接上手篇 台湾李宏毅教授写的,<1天搞懂深度学习> slideshare的链接: http://www.slideshare.net/tw_dsconf/ss-62245351? ...

  9. Deep Learning 学习笔记——第9章

    总览: 本章所讲的知识点包括>>>> 1.描述卷积操作 2.解释使用卷积的原因 3.描述pooling操作 4.卷积在实践应用中的变化形式 5.卷积如何适应输入数据 6.CNN ...

随机推荐

  1. 用python解析html

    python中,有三个库可以解析html文本,HTMLParser,sgmllib,htmllib.他们的实现方法不通,但功能差不多.这三个库中 提供解析html的类都是基类,本身并不做具体的工作.他 ...

  2. xen虚拟机安装实践

    xen虚拟机环境安装,用了2天的时间摸索,终于出来了,给大家分享一下. 1.安装宿主环境,我使用的是Centos6.3 2.安装xend,参考了一篇老外的文章,基本比较顺利. 地址:http://xe ...

  3. cocos2dx 3.0 飞机大战

    因为课程须要.然后又水平有限.所以写了个飞机大战.加上不会画画.所以图片资源也是从微信apk解压出来的,设计思路參考的偶尔e网事. 闲话不说.先讲一下设计.大体上一共分为3个场景.场景以下是Layer ...

  4. 16-UIKit(AutoLayout、Animation)

    目录: 一.AutoLayout自动布局 二.动画(Animation) 回到顶部 一.AutoLayout自动布局 1.什么是AutoLayout 从ios6开始引入的新技术,是新版的自动布局技术 ...

  5. django局域网建一个网站

    之前总是运行的python manage.py runserver,用默认的在本机访问的127.0.0.1:8000,如果跟几个同学一起去开发一个网站来玩玩的话,可以这样: python manage ...

  6. intent.getAction()

    这个是发送端注册上的IntentFilter filter = new IntentFilter( Intent.ACTION_MEDIA_SCANNER_STARTED); filter.addAc ...

  7. json datetime转换问题

    我用Newtonsoft.Json.dll转换成json,这次是把一个集合转换成json,这个集合里有个DateTime类型的数据,转换完成后会变成/Date(1286375605000+0800)/ ...

  8. 挺苹果的声音,iPhone 5s的两处进步

    苹果iPhone 5s发布后的两处重大进步让我很关注,但看了网上众多网友的点评,又深深的被中国当前手机发烧友圈的这种屌丝文化所震撼,这不是一条正确的道路,这将把中国的手机产业引向歧途,所以我不得不说几 ...

  9. 【Tesseract-OCR】在VS2012环境下调用API方法---注意避免名字冲突

    由于在VS2012中使用OpenCV可以得到插件ImageWatch.vsix的支持,查看图像非常方便,所以一直想在VS2012环境下把Tesseract-OCR融合进来,但是这一错误折腾了我好久: ...

  10. jstl标签经典

    1. <c:out> 库 :Core(核心库) URI : http://java.sun.com/jsp/jstl/core 前缀 : c 描述 :<c:out> 标签是一个 ...