鱼C论坛

 找回密码
 立即注册
查看: 2068|回复: 1

GRU神经网络预测出错求助

[复制链接]
发表于 2021-6-27 11:07:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
错误如下:
  1. Traceback (most recent call last):

  2.   File "<ipython-input-1-a6fe41261823>", line 1, in <module>
  3.     runfile('E:/文件/大论文/Python/代码/大论文/GRU预测/GRU股票预测.py', wdir='E:/文件/大论文/Python/代码/大论文/GRU预测')

  4.   File "D:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
  5.     execfile(filename, namespace)

  6.   File "D:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
  7.     exec(compile(f.read(), filename, 'exec'), namespace)

  8.   File "E:/文件/大论文/Python/代码/大论文/GRU预测/GRU股票预测.py", line 84, in <module>
  9.     callbacks=[cp_callback])

  10.   File "D:\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1513, in fit
  11.     raise TypeError('Unrecognized keyword arguments: ' + str(kwargs))

  12. TypeError: Unrecognized keyword arguments: {'validation_freq': 1}
复制代码


原代码如下:
  1. import numpy as np
  2. import tensorflow as tf
  3. from tensorflow.keras.layers import Dropout, Dense, GRU
  4. import matplotlib.pyplot as plt
  5. import os
  6. import pandas as pd
  7. from sklearn.preprocessing import MinMaxScaler
  8. from sklearn.metrics import mean_squared_error, mean_absolute_error
  9. import math

  10. maotai = pd.read_excel('大宏城市花园天气转化后.xlsx',encoding='utf-8')  # 读取股票文件

  11. training_set = maotai.iloc[0:2858 - 300, 9:10].values  # 前(2426-300=2126)天的开盘价作为训练集,表格从0开始计数,2:3 是提取[2:3)列,前闭后开,故提取出C列开盘价
  12. test_set = maotai.iloc[2858 - 300:, 9:10].values  # 后300天的开盘价作为测试集

  13. # 归一化
  14. sc = MinMaxScaler(feature_range=(0, 1))  # 定义归一化:归一化到(0,1)之间
  15. training_set_scaled = sc.fit_transform(training_set)  # 求得训练集的最大值,最小值这些训练集固有的属性,并在训练集上进行归一化
  16. test_set = sc.transform(test_set)  # 利用训练集的属性对测试集进行归一化

  17. x_train = []
  18. y_train = []

  19. x_test = []
  20. y_test = []

  21. # 测试集:csv表格中前2426-300=2126天数据
  22. # 利用for循环,遍历整个训练集,提取训练集中连续60天的开盘价作为输入特征x_train,第61天的数据作为标签,for循环共构建2426-300-60=2066组数据。
  23. for i in range(60, len(training_set_scaled)):
  24.     x_train.append(training_set_scaled[i - 60:i, 0])
  25.     y_train.append(training_set_scaled[i, 0])
  26. # 对训练集进行打乱
  27. np.random.seed(7)
  28. np.random.shuffle(x_train)
  29. np.random.seed(7)
  30. np.random.shuffle(y_train)
  31. tf.random.set_random_seed(7)
  32. # 将训练集由list格式变为array格式
  33. x_train, y_train = np.array(x_train), np.array(y_train)

  34. # 使x_train符合RNN输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]。
  35. # 此处整个数据集送入,送入样本数为x_train.shape[0]即2066组数据;输入60个开盘价,预测出第61天的开盘价,循环核时间展开步数为60; 每个时间步送入的特征是某一天的开盘价,只有1个数据,故每个时间步输入特征个数为1
  36. x_train = np.reshape(x_train, (x_train.shape[0], 60, 1))
  37. # 测试集:csv表格中后300天数据
  38. # 利用for循环,遍历整个测试集,提取测试集中连续60天的开盘价作为输入特征x_train,第61天的数据作为标签,for循环共构建300-60=240组数据。
  39. for i in range(60, len(test_set)):
  40.     x_test.append(test_set[i - 60:i, 0])
  41.     y_test.append(test_set[i, 0])
  42. # 测试集变array并reshape为符合RNN输入要求:[送入样本数, 循环核时间展开步数, 每个时间步输入特征个数]
  43. x_test, y_test = np.array(x_test), np.array(y_test)
  44. x_test = np.reshape(x_test, (x_test.shape[0], 60, 1))

  45. model = tf.keras.Sequential([
  46.     GRU(80, return_sequences=True),
  47.     Dropout(0.2),
  48.     GRU(100),
  49.     Dropout(0.2),
  50.     Dense(1)
  51. ])

  52. model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
  53.               loss='mean_squared_error')  # 损失函数用均方误差
  54. # 该应用只观测loss数值,不观测准确率,所以删去metrics选项,一会在每个epoch迭代显示时只显示loss值

  55. checkpoint_save_path = "./checkpoint/stock.ckpt"

  56. if os.path.exists(checkpoint_save_path + '.index'):
  57.     print('-------------load the model-----------------')
  58.     model.load_weights(checkpoint_save_path)

  59. cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,
  60.                                                  save_weights_only=True,
  61.                                                  save_best_only=True,
  62.                                                  monitor='val_loss')

  63. history = model.fit(x_train, y_train, batch_size=64, epochs=50, validation_data=(x_test, y_test), validation_freq=1,
  64.                     callbacks=[cp_callback])

  65. model.summary()

  66. file = open('./weights.txt', 'w')  # 参数提取
  67. for v in model.trainable_variables:
  68.     file.write(str(v.name) + '\n')
  69.     file.write(str(v.shape) + '\n')
  70.     file.write(str(v.numpy()) + '\n')
  71. file.close()

  72. loss = history.history['loss']
  73. val_loss = history.history['val_loss']

  74. plt.plot(loss, label='Training Loss')
  75. plt.plot(val_loss, label='Validation Loss')
  76. plt.title('Training and Validation Loss')
  77. plt.legend()
  78. plt.show()

  79. ################## predict ######################
  80. # 测试集输入模型进行预测
  81. predicted_stock_price = model.predict(x_test)
  82. # 对预测数据还原---从(0,1)反归一化到原始范围
  83. predicted_stock_price = sc.inverse_transform(predicted_stock_price)
  84. # 对真实数据还原---从(0,1)反归一化到原始范围
  85. real_stock_price = sc.inverse_transform(test_set[60:])
  86. # 画出真实数据和预测数据的对比曲线
  87. plt.plot(real_stock_price, color='red', label='MaoTai Stock Price')
  88. plt.plot(predicted_stock_price, color='blue', label='Predicted MaoTai Stock Price')
  89. plt.title('MaoTai Stock Price Prediction')
  90. plt.xlabel('Time')
  91. plt.ylabel('MaoTai Stock Price')
  92. plt.legend()
  93. plt.show()

  94. ##########evaluate##############
  95. # calculate MSE 均方误差 ---> E[(预测值-真实值)^2] (预测值减真实值求平方后求均值)
  96. mse = mean_squared_error(predicted_stock_price, real_stock_price)
  97. # calculate RMSE 均方根误差--->sqrt[MSE]    (对均方误差开方)
  98. rmse = math.sqrt(mean_squared_error(predicted_stock_price, real_stock_price))
  99. # calculate MAE 平均绝对误差----->E[|预测值-真实值|](预测值减真实值求绝对值后求均值)
  100. mae = mean_absolute_error(predicted_stock_price, real_stock_price)
  101. print('均方误差: %.6f' % mse)
  102. print('均方根误差: %.6f' % rmse)
  103. print('平均绝对误差: %.6f' % mae)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 15:55:25 | 显示全部楼层
楼主,有没有GRU的学习交流群呀,最近开始学这个,但是好多不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 17:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表