Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 有状态LSTM的实现_Machine Learning_Tensorflow_Deep Learning_Keras - Fatal编程技术网

Machine learning 有状态LSTM的实现

Machine learning 有状态LSTM的实现,machine-learning,tensorflow,deep-learning,keras,Machine Learning,Tensorflow,Deep Learning,Keras,我想创建一个有状态的LSTM 我的数据是68871 x 43,其中特征在第1-42列,标签在第43列 我的keras LSTM数据分类代码为 import numpy import matplotlib.pyplot as plt import math from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM, Dropout from sklearn.pre

我想创建一个有状态的LSTM

我的数据是68871 x 43,其中特征在第1-42列,标签在第43列

我的keras LSTM数据分类代码为

import numpy
import matplotlib.pyplot as plt
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM, Dropout
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):
    dataX, dataY= [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back), 0:43]
        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
look_back=5
dataset = numpy.loadtxt("Source.txt", delimiter=" ")
# normalize the dataset
scaler = MinMaxScaler(feature_range=(0, 1))
dataset[:,0:43] = scaler.fit_transform(dataset[:,0:43])
# 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),:]
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
print trainX.shape
#trainX=numpy.reshape(trainX,(46117,43,25))
# create and fit the LSTM network
model = Sequential()
model.add(LSTM(10, input_dim=43))
#model.add(Dropout(0.3))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adagrad')
model.fit(trainX, trainY, nb_epoch=10, batch_size=5)
model.evaluate(testX, testY, batch_size=1)
请建议进行哪些更改以使LSTM有状态 提前非常感谢

model.add(LSTM(10, input_shape=(5,43), stateful=True))
我想这就是你要找的。看

此外,如果您想使用有状态lstm,则洗牌训练数据(这是默认值)是没有意义的。因此,也要修改这一行:

model.fit(trainX, trainY, nb_epoch=10, batch_size=5, shuffle=False)

输入形状必须在model.add()中提供,我尝试了许多输入大小,但它会抛出错误。您能建议一些有效的输入尺寸吗?print trainX.shape给出了什么?它打印(46137,5,43):46137是序列样本数5是lstm时间步43是输入尺寸的数量请输入我的答案。您正在输入长度为5的序列,其中每个时间戳都是长度为43的1D张量,如果我理解正确的话。所以你的lstm的输入是形状的(5,43)。这回答了你的问题吗?