BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #20774同步于 2016/8/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

[问题]keras为3维input做LSTM预测遇到问题求助

Richard1024
2016/8/13镜像同步15 回复
挺久的帖子了,不知如何突然就有这么多大神回复了,好激动~ 借此机会,就再请问大家个问题吧: 对于常见的时间序列数据,有着多个chennel,如果想对每个channel只沿着时间方向做卷积,keras提供的API是不是办不到,也就是不能保留每个通道的独立性? --- case是时间序列 最原始数据print出来是这样的: h1 h2 0 16,853 16,450 1 14,155 14,038 2 14,439 14,272 3 11,273 10,415 4 10,750 10,321 5 15,742 15,682 6 26,014 26,447 7 25,104 25,122 8 21,175 21,056 9 23,405 23,507 10 30,404 31,248 11 22,937 22,999 。。。 所以输入是将最初二维数据,按依据长度为100的历史数据预测下一个,处理成了X_train为包含800个100X2的矩阵的array, X_train.shape 是(800,100,2),y_train.shape是(800,2) def _load_data(data, n_prev = 100): docX, docY = [], [] for i in range(len(data)-n_prev): docX.append(data.iloc[i:i+n_prev].as_matrix()) docY.append(data.iloc[i+n_prev].as_matrix()) alsX = np.array(docX) alsY = np.array(docY) return alsX, alsY def train_test_split(df, test_size=0.1): """ This just splits data to training and testing parts """ ntrn = int(round(len(df) * (1 - test_size))) X_train, y_train = _load_data(df.iloc[0:ntrn]) X_test, y_test = _load_data(df.iloc[ntrn:]) print(repr(X_train)) print("X_train shape is :{0}".format(X_train.shape)) print("y_train shape is :{0}").format(y_train.shape) return (X_train, y_train), (X_test, y_test) ########以上是将数据处理分成input,output和训练集、测试集############## 模型代码 model = Sequential() model.add(TimeDistributed(LSTM(8,input_shape=(100,2)))) model.add(TimeDistributed(LSTM(2))) model.fit(X_train, y_train, batch_size=700, nb_epoch=5, validation_data=(X_test, y_test), verbose=1) print(repr(X_train))结果是: array([[['16,853', '16,450'], ['14,155', '14,038'], ['14,439', '14,272'], ..., ['11,191', '11,025'], ['10,155', '9,792'], ['10,295', '9,610']], [['14,155', '14,038'], ['14,439', '14,272'], ['11,273', '10,415'], ..., ['10,155', '9,792'], ['10,295', '9,610'], ['10,644', '10,196']], [['14,439', '14,272'], ['11,273', '10,415'], ['10,750', '10,321'], ..., ['10,295', '9,610'], ['10,644', '10,196'], ['11,225', '10,739']], ..., X_train shape is :(800, 100, 2) y_train shape is :(800,2) 所以现在有几个问题求助大家: 1、如何设计模型,或者如何输入参数,使其输出会成为两维呢?(现在中间一直报错,还没见过结果。。。) 2、原始数据都不带引号啥的,为啥X_train中的数据就有引号了,这是错误么 3、model.add()最初我是直接写的model.add(LSTM(8,input_shape=(100,2))),当时报错expected activation_1 to have 3 dimensions, but got array with shape (800, 2),网上说到,对于3D以上的数据,需要用到TimeDistributed,然而写成现在这样model.add(TimeDistributed(LSTM(8,input_shape=(100,2)))),却发现连input_shape桉树都没识别出,报错:The first layer in a Sequential model must get an `input_shape` or `batch_input_shape` argument. 小白一个,还望各位大神指点一二啊[ema23]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Richard1024机器人#1 · 2016/8/13
求助啊
shiyuan999机器人#2 · 2016/11/2
请问,你之前的问题解决了吗?我也想知道解决方法
Richard1024机器人#3 · 2016/11/3
先确认下test_X,test_Y中数据是不是为空 【 在 shiyuan999 的大作中提到: 】 : 请问,你之前的问题解决了吗?我也想知道解决方法
mima031103机器人#4 · 2016/11/3
输出带引号是因为转化成了字符串么
pzhfreeze机器人#5 · 2016/11/3
1,你现在的任务是many2one,那么就不需要timedis了,你现在的输出是100*2 2,看你的代码是用了pandas? 3,第一层用masking,再接lstm试一下
Richard1024机器人#6 · 2016/11/3
应该是数据保存时候是字符串形式了,后来用EXCEL打开,设置数值型格式,就没引号了 【 在 mima031103 的大作中提到: 】 : 输出带引号是因为转化成了字符串么
baozuyi机器人#7 · 2016/11/3
试了一下没有问题,可以跑 ```Python import numpy from keras.models import Sequential from keras.layers.recurrent import LSTM from keras.layers import Dense, Activation xx = numpy.random.rand(800,100,2) yy = numpy.random.rand(800,2) model = Sequential() model.add(LSTM(8,input_shape=(100,2))) model.add(Dense(2)) model.compile(optimizer='adadelta', loss='mse') model.fit(xx, yy, batch_size=30, nb_epoch=5, verbose=1) ```
dbzhagg机器人#8 · 2016/11/3
活捉一只小包子。。。 【 在 baozuyi 的大作中提到: 】 : 试了一下没有问题,可以跑 : [md] : ```Python : ...................
sartresh机器人#9 · 2016/11/3
先reshape,然后用二维卷积,就可以。