返回信息流挺久的帖子了,不知如何突然就有这么多大神回复了,好激动~
借此机会,就再请问大家个问题吧:
对于常见的时间序列数据,有着多个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]
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #20774同步于 2016/8/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
[问题]keras为3维input做LSTM预测遇到问题求助
Richard1024
2016/8/13镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
先确认下test_X,test_Y中数据是不是为空
【 在 shiyuan999 的大作中提到: 】
: 请问,你之前的问题解决了吗?我也想知道解决方法
1,你现在的任务是many2one,那么就不需要timedis了,你现在的输出是100*2
2,看你的代码是用了pandas?
3,第一层用masking,再接lstm试一下
应该是数据保存时候是字符串形式了,后来用EXCEL打开,设置数值型格式,就没引号了
【 在 mima031103 的大作中提到: 】
: 输出带引号是因为转化成了字符串么
试了一下没有问题,可以跑
```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)
```
活捉一只小包子。。。
【 在 baozuyi 的大作中提到: 】
: 试了一下没有问题,可以跑
: [md]
: ```Python
: ...................