2017-02-20 48 views
1

我的数据是68871 x 43,其中的功能位于列号。 1-42并在第号栏中加上标签。 43测试期间LSTM中的错误

对数据进行分类我keras LSTM代码

import numpy 
import matplotlib.pyplot as plt 
import pandas 
import math 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.layers import LSTM 
from sklearn.preprocessing import MinMaxScaler 
from sklearn.metrics import mean_squared_error 
# convert an array of values into a dataset matrix 
def create_dataset(dataset, look_back=1): 
    dataX, dataY = [], [] 
    for i in range(len(dataset)-look_back-1): 
     a = dataset[i:(i+look_back), 0] 
     #if i==0 
     # print len(a) 
     dataX.append(a) 
     dataY.append(dataset[i + look_back, 43]) 
    return numpy.array(dataX), numpy.array(dataY) 
# fix random seed for reproducibility 
numpy.random.seed(7) 
# load the dataset 
#dataframe = pandas.read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3) 
dataset = numpy.loadtxt("Source.txt", delimiter=" ") 
#dataset = dataframe.values 
#dataset = dataset.astype('float32') 
# normalize the dataset 
scaler = MinMaxScaler(feature_range=(0, 1)) 
dataset = scaler.fit_transform(dataset) 
# split into train and test sets 
train_size = int(len(dataset) * 0.67) 
test_size = len(dataset) - train_size 
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] 
# reshape into X=t and Y=t+1 
look_back = 1 
trainX, trainY = create_dataset(train, look_back) 
testX, testY = create_dataset(test, look_back) 
# reshape input to be [samples, time steps, features] 
trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) 
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1])) 
# create and fit the LSTM network 
model = Sequential() 
model.add(LSTM(3, input_dim=look_back)) 
model.add(Dense(1)) 
model.compile(loss='mean_squared_error', optimizer='adam') 
model.fit(trainX, trainY, nb_epoch=1, batch_size=1) 
score, acc = model.evaluate(testX, testY) 
print('Test score:', score) 
print('Test accuracy:', acc) 

测试时间enter image description here

请帮助解决这个过程中我得到这个错误,提前很多感谢

+0

嘿。你的问题解决了吗?考虑验证答案或提供进一步的细节。 – pltrdy

回答

3

我想你的问题是model.evaluate(testX, testY)只返回一个值。

您的错误消息告诉您numpy.float64不可迭代。这是什么意思model.evaluate(testX, testY)返回float64,因此,你不能把它返回值为两个变量score, acc

这就像做:

def single_return(): 
    return np.float64(10) 
a, b = single_return() 

(请注意,此代码将提高完全相同的错误)。

然后,我会建议,既要现在解决它,也作为一个相当好的做法,为将来总是返回到一个单一的变量,然后分裂。它使错误信息更加清晰,因为只有具有问题的线路才是虚构,而不是evaluation

希望它有帮助。
pltrdy