学习神经网络

想拿lstm 做回归, 网上找demo 基本三种: sin拟合cos 那个, 比特币价格预测(我用相同的代码和数据没有跑成功, 我太菜了)和keras 的一个例子

我基于keras 那个实现了一个, 这里贴一下我的代码.

  1. import numpy as np
  2. np.random.seed(1337)
  3. from sklearn.model_selection import train_test_split
  4. import matplotlib.pyplot as plt
  5. import keras
  6. from keras.models import Sequential
  7. from keras.layers import Activation
  8. from keras.layers import LSTM
  9. from keras.layers import Dropout
  10. from keras.layers import Dense

  

  1. # 数据的数量
  2. datan = 400
  3. X = np.linspace(-1, 2, datan)
  4. np.random.shuffle(X)
  5. # 构造y y=3*x + 2 并加上一个0-0.5 的随机数
  6. Y = 3.3 * X + 2 + np.random.normal(0, 0.5, (datan, ))
  7. # 展示一下数据
  8. plt.scatter(X, Y)
  9. plt.show()

  

  1. # 训练集测试集划分 2:1
  2. X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33, random_state=42)

  

  1. # 一些参数
  2. neurons = 128
  3. activation_function = 'tanh' # 激活函数
  4. loss = 'mse' # 损失函数
  5. optimizer="adam" # 优化函数
  6. dropout = 0.01

  

  1. model = Sequential()
  2.  
  3. model.add(LSTM(neurons, return_sequences=True, input_shape=(1, 1), activation=activation_function))
  4. model.add(Dropout(dropout))
  5. model.add(LSTM(neurons, return_sequences=True, activation=activation_function))
  6. model.add(Dropout(dropout))
  7. model.add(LSTM(neurons, activation=activation_function))
  8. model.add(Dropout(dropout))
  9. model.add(Dense(output_dim=1, input_dim=1))
  10. #
  11. model.compile(loss=loss, optimizer=optimizer)

  

  1. # training 训练
  2. print('Training -----------')
  3. epochs = 2001
  4. for step in range(epochs):
  5. cost = model.train_on_batch(X_train[:, np.newaxis, np.newaxis], Y_train)
  6. if step % 30 == 0:
  7. print(f'{step} train cost: ', cost)

  

  1. # 测试
  2. print('Testing ------------')
  3. cost = model.evaluate(X_test[:, np.newaxis, np.newaxis], Y_test, batch_size=40)
  4. print('test cost:', cost)

  

  1. # 打印预测结果
  2. Y_pred = model.predict(X_test[:, np.newaxis, np.newaxis])
  3. plt.scatter(X_test, Y_test)
  4. plt.plot(X_test, Y_pred, 'ro')
  5. plt.show()

  


  1. loss_history = {}
  2. def run(X_train, Y_train, X_test, Y_test, epochs, activation_func='tanh', loss_func='mse', opt_func='sgd'):
  3. """
  4.   这里是对上面代码的封装, 我测试了一下各种优化函数的效率
  5. 可用的目标函数
  6. mean_squared_error或mse
  7. mean_absolute_error或mae
  8. mean_absolute_percentage_error或mape
  9. mean_squared_logarithmic_error或msle
  10. squared_hinge
  11. hinge
  12. categorical_hinge
  13. binary_crossentropy(亦称作对数损失,logloss)
  14. logcosh
  15. categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列
  16. sparse_categorical_crossentrop:如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)
  17. kullback_leibler_divergence:从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异.
  18. poisson:即(predictions - targets * log(predictions))的均值
  19. cosine_proximity:即预测值与真实标签的余弦距离平均值的相反数
  20. 优化函数
  21. sgd
  22. RMSprop
  23. Adagrad
  24. Adadelta
  25. Adam
  26. Adamax
  27. Nadam
  28. """
  29. mdl = Sequential()
  30. mdl.add(LSTM(neurons, return_sequences=True, input_shape=(1, 1), activation=activation_func))
  31. mdl.add(Dropout(dropout))
  32. mdl.add(LSTM(neurons, return_sequences=True, activation=activation_func))
  33. mdl.add(Dropout(dropout))
  34. mdl.add(LSTM(neurons, activation=activation_func))
  35. mdl.add(Dropout(dropout))
  36. mdl.add(Dense(output_dim=1, input_dim=1))
  37. #
  38. mdl.compile(optimizer=opt_func, loss=loss_func)
  39. #
  40. print('Training -----------')
  41. loss_history[opt_func] = []
  42. for step in range(epochs):
  43. cost = mdl.train_on_batch(X_train[:, np.newaxis, np.newaxis], Y_train)
  44. if step % 30 == 0:
  45. print(f'{step} train cost: ', cost)
  46. loss_history[opt_func].append(cost)
  47. # test
  48. print('Testing ------------')
  49. cost = mdl.evaluate(X_test[:, np.newaxis, np.newaxis], Y_test, batch_size=40)
  50. print('test cost:', cost)
  51. #
  52. Y_pred = mdl.predict(X_test[:, np.newaxis, np.newaxis])
  53. plt.scatter(X_test, Y_test)
  54. plt.plot(X_test, Y_pred, 'ro')
  55. return plt

  

  1. run(X_train, Y_train, X_test, Y_test, 2000)
  2. run(X_train, Y_train, X_test, Y_test, 2000, opt_func='Adagrad')
  3. run(X_train, Y_train, X_test, Y_test, 2000, opt_func='Nadam')
  4. run(X_train, Y_train, X_test, Y_test, 2000, opt_func='Adadelta')
  5. run(X_train, Y_train, X_test, Y_test, 2000, opt_func='RMSprop')
  6. run(X_train, Y_train, X_test, Y_test, 2000, opt_func='Adam')
  7. run(X_train, Y_train, X_test, Y_test, 2000, opt_func='Adamax')
  8.  
  9. #
  10. arr = [i*30 for i in range(len(loss_history['sgd']))]
  11. plt.plot(arr, loss_history['sgd'], 'b--')
  12. plt.plot(arr, loss_history['RMSprop'], 'r--')
  13. plt.plot(arr, loss_history['Adagrad'], color='orange', linestyle='--')
  14. plt.plot(arr, loss_history['Adadelta'], 'g--')
  15. plt.plot(arr, loss_history['Adam'], color='coral', linestyle='--')
  16. plt.plot(arr, loss_history['Adamax'], color='tomato', linestyle='--')
  17. plt.plot(arr, loss_history['Nadam'], color='darkkhaki', linestyle='--')
  18. plt

最快的是 adadelta, 最慢的sgd. 其他差不多.

Keras + LSTM 做回归demo的更多相关文章

  1. Keras + LSTM 做回归demo 2

    接上回, 这次做了一个多元回归 这里贴一下代码 import numpy as np np.random.seed(1337) from sklearn.model_selection import ...

  2. 循环神经网络LSTM RNN回归:sin曲线预测

    摘要:本篇文章将分享循环神经网络LSTM RNN如何实现回归预测. 本文分享自华为云社区<[Python人工智能] 十四.循环神经网络LSTM RNN回归案例之sin曲线预测 丨[百变AI秀]& ...

  3. 利用Caffe做回归(regression)

    Caffe应该是目前深度学习领域应用最广泛的几大框架之一了,尤其是视觉领域.绝大多数用Caffe的人,应该用的都是基于分类的网络,但有的时候也许会有基于回归的视觉应用的需要,查了一下Caffe官网,还 ...

  4. [翻译]用神经网络做回归(Using Neural Networks With Regression)

    本文英文原文出自这里, 这个博客里面的内容是Java开源, 分布式深度学习项目deeplearning4j的介绍学习文档. 简介: 一般来说, 神经网络常被用来做无监督学习, 分类, 以及回归. 也就 ...

  5. 单向LSTM笔记, LSTM做minist数据集分类

    单向LSTM笔记, LSTM做minist数据集分类 先介绍下torch.nn.LSTM()这个API 1.input_size: 每一个时步(time_step)输入到lstm单元的维度.(实际输入 ...

  6. 使用LSTM做电影评论负面检测——使用朴素贝叶斯才51%,但是使用LSTM可以达到99%准确度

    基本思路: 每个评论取前200个单词.然后生成词汇表,利用词汇index标注评论(对 每条评论的前200个单词编号而已),然后使用LSTM做正负评论检测. 代码解读见[[[评论]]]!embeddin ...

  7. python 做回归

    1 一元线性回归 线性回归是一种简单的模型,但受到广泛应用,比如预测商品价格,成本评估等,都可以用一元线性模型.y = f(x) 叫做一元函数,回归意思就是根据已知数据复原某些值,线性回归(regre ...

  8. keras神经网络做简单的回归问题

    咸鱼了半个多月了,要干点正经事了. 最近在帮老师用神经网络做多变量非线性的回归问题,没有什么心得,但是也要写个博文当个日记. 该回归问题是四个输入,一个输出.自己并不清楚这几个变量有什么关系,因为是跟 ...

  9. 用 LSTM 做时间序列预测的一个小例子(转自简书)

    问题:航班乘客预测 数据:1949 到 1960 一共 12 年,每年 12 个月的数据,一共 144 个数据,单位是 1000 下载地址 目标:预测国际航班未来 1 个月的乘客数 import nu ...

随机推荐

  1. RAxML安装

    1.下载解压 $ wget https://codeload.github.com/stamatak/standard-RAxML/zip/master -O standard-RAxML-maste ...

  2. 北京大学Cousera学习笔记--1-学习规划

    1.计算机导论与C语言基础 1>.计算导论:计算机的基本原理.计算机的发展趋势.程序运行的基本原理 2>.C程序设计:感性认识C程序.理性认识C程序:机构化的程序-函数.更多的数据结构 2 ...

  3. C# string 常用功能的方法扩展

    #region Usings using System; using System.Text; using System.Data; using System.Data.SqlClient; usin ...

  4. asp.net core mvc 在中间件中使用依赖注入问题:System.InvalidOperationException: Cannot resolve scoped service 'IXXXService' from root provider.

    今天在弄JWT的时候需要用到用户验证使用一个自己写好的验证,但在出现了:System.InvalidOperationException: Cannot resolve scoped service ...

  5. sql server中的while循环语句

    语法格式: while 条件 begin ....... end declare @num begin update SDetail end

  6. AbstractMethodError:

    AbstractMethodError: This java.lang.AbstractMethodError is usually thrown when we try to invoke the ...

  7. 同事问如何判断同花顺,我用javascript的二维数组写了个简易demo

    有个前同事在群里问如何判断是否为同花顺我用javascript的二维数组写了个简易demo. <!DOCTYPE html> <html> <body> <s ...

  8. kubernetes集群pod使用tc进行网络资源限额

    kubernetes集群pod使用tc进行网络资源限额 Docker容器可以实现CPU,内存,磁盘的IO限额,但是没有实现网络IO的限额.主要原因是在实际使用中,构建的网络环境是往超级复杂的大型网络. ...

  9. 微博第三方js-sdk登录

    https://open.weibo.com <meta property="wb:webmaster" content="your appkey" /& ...

  10. laravel中ajax,post传值问题

    //laravel中有CSRF保护 不加的话会出现419错误$.ajax({ url: '/admin/user/'+id, type: "POST", data: {'_toke ...