LSTM序列学习-预测结果问题

问题描述

我正在尝试在Python 3.5.2中实现序列学习|我的Windows 10机器上的Anaconda 4.2.0(64位)。我已经搜寻了互联网以获取尽可能多的信息,但是文档缺少我需要的详细信息。我将分享我的代码,然后提出我的问题。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow
import keras as krs
from keras.models import Sequential
from keras.layers import Dense,LSTM,Dropout
from keras.preprocessing import sequence
from sklearn.preprocessing import QuantileTransformer,MinMaxScaler
from sklearn.metrics import mean_squared_error

DF = pd.read_csv("./integer_seqn/train.csv",delimiter = ",")
N = DF.shape[0]

data = []
# turn pandas df into list
for rows in DF['Sequence']:
    
    fix = rows.split(",")
    fix = [int(elem) for elem in fix]
    data.append(fix)

# for now I am working with one sequence at a time
D = data[0]
D = np.reshape(D,(len(D),1))
D = D.astype('float64')

# scaling needed since LSTMs are sensitive to large data values
# for this first sequence I use quantile scaling since the data is skewed
scaler = MinMaxScaler((0,1))
X_train_scaled = scaler.fit_transform(D)

# split each sequence into a training and a test set
train_size = int(len(X_train_scaled)*(0.90))
test_size = len(X_train_scaled) - train_size
train,test = X_train_scaled[0:train_size],X_train_scaled[train_size:len(X_train_scaled)]

# creates a data set so that the first column
# is every n-th element in a sequence
# and the second column is every (n+1)-th element in a sequence
dataX,dataY = [],[]
time_step = 2
for i in range(0,(len(train)-time_step)):
    
    dataX.append(train[i:(i+time_step),0])
    dataY.append(train[i+time_step,0])

dataX = np.array(dataX)
dataY = np.array(dataY)

testX,testY = [],[]
for i in range(0,(len(test)-time_step)):
     
     testX.append(test[i:(i+time_step),0])
     testY.append(test[i+time_step,0])

testX = np.array(testX)
testY = np.array(testY)

# need to reshape the data so that model.fit will accept it
dataX = np.reshape(dataX,(dataX.shape[0],dataX.shape[1],1))
testX = np.reshape(testX,(testX.shape[0],testX.shape[1],1))

# build RNN-LSTM for a sequence
# the number of LSTM nodes is adjustable
model = Sequential()
model.add(LSTM(units = 20,input_shape = (1,1)))
model.add(Dense(1))
model.compile(loss="mean_squared_error",optimizer = "adam")

model.fit(dataX,dataY,epochs = 100,batch_size = 1,verbose = 0)

# predict using the model (validation with the train set and test with the test set)
trainPredict = model.predict(dataX)
testPredict = model.predict(testX)
# "unscale" the data
trainPredict = scaler.inverse_transform(trainPredict)
dataY = scaler.inverse_transform(np.reshape(dataY,(len(dataY),1)))
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform(np.reshape(testY,(len(testY),1)))

我正在按整数序列测试此代码

data[0] = [1,3,13,87,1053,28576,2141733,508147108,402135275365,1073376057490373,9700385489355970183,298434346895322960005291,31479360095907908092817694945,11474377948948020660089085281068730]

我得到一些非常糟糕的预测。当我执行model.predict(dataX)时,数量级明显大于真实的预测。此外,提供的预测都是相同的。最近,我得到一个7x1 numpy数组,其中填充了值 1.2242328e + 32 。我在model.predict(testX)中遇到了类似的情况,在这里我得到了一个3x1的numpy数组,其中填充了值 1.2242328e + 32 ,但至少此预测更接近了(尽管不像我预测的那样接近)想要)到testY中的最后一个元素。

我的特定问题是:为什么我的预测数组填充了相同的值?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...