资源简介
https://blog.csdn.net/u012465304/article/details/82656803
我的博客上的LSTM例程,用c++写的,由于找我私聊要的人太多了,就上传到这个上面,大家可自行下载
代码片段和文件信息
/*
Neal 2018-04-09
我自己修改的LSTM
*/
#include “iostream“
#include “math.h“
#include “stdlib.h“
#include “time.h“
#include “vector“
#include “assert.h“
#include
using namespace std;
#define innode 1 //输入结点数,将输入2个加数
#define hidenode 26 //隐藏结点数,存储“携带位”
#define outnode 1 //输出结点数,将输出一个预测数字
#define randval(high) ( (double)rand() / RAND_MAX * high )
#define uniform_plus_minus_one ( (double)( 2.0 * rand() ) / ((double)RAND_MAX + 1.0) - 1.0 ) //均匀随机分布
//激活函数
double sigmoid(double x)
{
return 1.0 / (1.0 + exp(-x));
}
//激活函数的导数,y为激活函数值
double dsigmoid(double y)
{
return y * (1.0 - y);
}
//tanh的导数,y为tanh值
double dtanh(double y)
{
y = tanh(y);
return 1.0 - y * y;
}
class RNN
{
public:
RNN(int batchsizeint timestep);
virtual ~RNN();
void train(int **x_batch int **y_batch int loop_timeint alpha);
public:
double W_I[innode][hidenode]; //连接输入与隐含层单元中输入门的权值矩阵
double U_I[hidenode][hidenode]; //连接上一隐层输出与本隐含层单元中输入门的权值矩阵
double W_F[innode][hidenode]; //连接输入与隐含层单元中遗忘门的权值矩阵
double U_F[hidenode][hidenode]; //连接上一隐含层与本隐含层单元中遗忘门的权值矩阵
double W_O[innode][hidenode]; //连接输入与隐含层单元中遗忘门的权值矩阵
double U_O[hidenode][hidenode]; //连接上一隐含层与现在时刻的隐含层的权值矩阵
double W_G[innode][hidenode]; //用于产生新记忆的权值矩阵
double U_G[hidenode][hidenode]; //用于产生新记忆的权值矩阵
double W_out[hidenode][outnode]; //连接隐层与输出层的权值矩阵
double *x; //layer 0 输出值,由输入向量直接设定
//double *layer_1; //layer 1 输出值
double *y; //layer 2 输出值
int time_step; //当前位的数据跟之前多少位的数据有关 训练数据有多少列
int batch_size; // 训练数据有多少行
};
void winit(double w[] int n) //权值初始化
{
for(int i=0; i w[i] = uniform_plus_minus_one; //均匀随机分布
}
RNN::RNN(int batchsizeint timestep = 7)
{
batch_size = batchsize;
time_step = timestep;
x = new double[innode];
y = new double[outnode];
winit((double*)W_I innode * hidenode);
winit((double*)U_I hidenode * hidenode);
winit((double*)W_F innode * hidenode);
winit((double*)U_F hidenode * hidenode);
winit((double*)W_O innode * hidenode);
winit((double*)U_O hidenode * hidenode);
winit((double*)W_G innode * hidenode);
winit((double*)U_G hidenode * hidenode);
winit((double*)W_out hidenode * outnode);
}
RNN::~RNN()
{
delete x;
delete y;
}
/*
x是x时间轴的数据,二维数据,由timestep结合数据多少来定大小
*/
void RNN::train(int **x_batch int **y_batch int loop_time=1100 int alpha=0.1)
{
int epoch i j k m p batch_count;
batch_count = 0;
vector I_vector; //输入门
vector F_vector; //遗忘门
vector O_vector; //输出门
vector G_vector; //新记忆
vector S_vector; //状态值
vector h_vector; //输出值
vector y_delta; //保存误差关于输出层的偏导
for(epoch = 0; epoch < loop_time; epoch++)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1150165 2018-07-27 16:04 MyLSTM\bin\Debug\MyLSTM.exe
文件 14053 2018-07-27 16:01 MyLSTM\main.cpp
文件 1070 2018-07-27 16:00 MyLSTM\MyLSTM.cbp
文件 174 2018-07-27 16:00 MyLSTM\MyLSTM.depend
文件 322 2018-09-25 09:48 MyLSTM\MyLSTM.layout
文件 145389 2018-07-27 16:03 MyLSTM\obj\Debug\main.o
目录 0 2018-07-27 16:04 MyLSTM\bin\Debug
目录 0 2018-07-27 16:03 MyLSTM\obj\Debug
目录 0 2018-07-27 16:03 MyLSTM\bin
目录 0 2018-07-27 16:02 MyLSTM\obj
目录 0 2018-09-25 09:48 MyLSTM
----------- --------- ---------- ----- ----
1311173 11
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论