输入形状Keras RNN [英] Input Shape Keras RNN

查看:109
本文介绍了输入形状Keras RNN的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用时间序列数据,其形状为 2000x1001 ,其中2000是案例数,1000行表示时域数据,在此期间X方向上的位移1秒周期,这意味着时间步长为0.001.最后一列代表速度,我需要根据1秒内的位移预测输出值.应该如何在 Keras 中为 RNN 调整输入数据?我已经看过一些教程,但仍然对RNN中的Input Shape感到困惑.预先感谢

I'm working with a time-series data, that has shape of 2000x1001, where 2000 is the number of cases, 1000 rows represent the data in time-domain, displacements in X direction during 1 sec period, meaning that the timestep is 0.001. The last column represents the speed, the output value that I need to predict based on the displacements during 1 sec. How the Input Data should be shaped for RNN in Keras? I've gone trough some tutorials, but still I'm cofused about Input Shape in RNN. Thanks in advance

#load data training data
dataset=loadtxt("Data.csv", delimiter=",")
x = dataset[:,:1000]
y = dataset[:,1000]


#Create train and test dataset with an 80:20 split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) 

#input scaling
scaler = StandardScaler()
x_train_s =scaler.fit_transform(x_train)
x_test_s = scaler.transform(x_test)

num_samples = x_train_s.shape[0] ## Number of samples
num_vals    = x_train_s.shape[1] # Number of elements in each sample

x_train_s = np.reshape(x_train_s, (num_samples, num_vals, 1))

#create model
model = Sequential()
model.add(LSTM(100, input_shape=(num_vals, 1)))
model.add(Dense(1, activation='relu'))
model.compile(loss='mae', optimizer='adam',metrics = ['mape'])
model.summary()

#training
history = model.fit(x_train_s, y_train,epochs=10, verbose = 1, batch_size =64)

推荐答案

看下面的代码: 它正在尝试根据之前的6个值预测下一个4个值. 遵循注释并查看如何使用它来处理非常简单的输入 作为rnn/lstm中的输入

look at this code: it is trying to predict next 4 values based on previous 6 values. follow the comments and see how very simple input is manipulated for using it as input in rnn/lstm

关注代码中的注释

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from tensorflow.keras import Model
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import RNN, LSTM

"""
creating a toy dataset
lets use this below ```input_sequence``` as the sequence to make data points.
as per the question, we will use 6 points to predict next 4 points
"""
input_sequence = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10]

X_train = []
y_train = []


**#first 6 points will be our input data points and next 4 points will be data label.
#so on we will shift by 1 and make such data points and label pairs**


for i in range(len(input_sequence)-9):
    X_train.append(input_sequence[i:i+6])
    y_train.append(input_sequence[i+6:i+10])

X_train = np.array(X_train, dtype=np.float32)
y_train = np.array(y_train, dtype=np.int32)))


**#X_test for the predictions (contains 6 points)**


X_test = np.array([[8,9,10,1,2,3]],dtype=np.float32)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)


**#we will be using basic LSTM, which accepts input in ```[num_inputs, time_steps, data_points], therefore reshaping as per that```** 
# so here:
# 1. num_inputs = how many sequence of 6 points you want to use i.e. rows (we use X_train.shape[0] )

# 2. time_steps = batches you can considered i.e. if you want to use 1 or 2 or 3 rows

# 3. data_points = number of points (for ex. in our case its 6 points we are using)

X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)

x_points = X_train.shape[-1]
print("one input contains {} points".format(x_points))

model = Sequential()
model.add(LSTM(4, input_shape=(1, x_points)))
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='adam')
model.summary()

model.fit(X_train, y_train, epochs=500, batch_size=5, verbose=2)
output = list(map(np.ceil, model.predict(X_test)))
print(output)

希望它会有所帮助.请提出任何疑问.

hope it helps. ask for any doubt pls.

这篇关于输入形状Keras RNN的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆