CONST_TRAINTING_SEQUENCE_LENGTH = 12
CONST_TESTING_CASES = 5
def dataNormalization(data):
return [(datum - data[0]) / data[0] for datum in data]
def dataDeNormalization(data, base):
return [(datum + 1) * base for datum in data]
def getDeepLearningData(ticker):
# Step 1. Load data
data = pandas.read_csv('/Users/yindeyong/Desktop/Django_Projects/pythonstock/data/Intraday/' + ticker + '.csv')[
'close'].tolist()
# Step 2. Building Training data
dataTraining = []
for i in range(len(data) - CONST_TESTING_CASES * CONST_TRAINTING_SEQUENCE_LENGTH):
dataSegment = data[i:i + CONST_TRAINTING_SEQUENCE_LENGTH + 1]
dataTraining.append(dataNormalization(dataSegment))
dataTraining = numpy.array(dataTraining)
numpy.random.shuffle(dataTraining)
X_Training = dataTraining[:, :-1]
Y_Training = dataTraining[:, -1]
# Step 3. Building Testing data
X_Testing = []
Y_Testing_Base = []
for i in range(CONST_TESTING_CASES, 0, -1):
dataSegment = data[-(i + 1) * CONST_TRAINTING_SEQUENCE_LENGTH:-i * CONST_TRAINTING_SEQUENCE_LENGTH]
Y_Testing_Base.append(dataSegment[0])
X_Testing.append(dataNormalization(dataSegment))
Y_Testing = data[-CONST_TESTING_CASES * CONST_TRAINTING_SEQUENCE_LENGTH:]
X_Testing = numpy.array(X_Testing)
Y_Testing = numpy.array(Y_Testing)
# Step 4. Reshape for deep learning
X_Training = numpy.reshape(X_Training, (X_Training.shape[0], X_Training.shape[1], 1))
X_Testing = numpy.reshape(X_Testing, (X_Testing.shape[0], X_Testing.shape[1], 1))
return X_Training, Y_Training, X_Testing, Y_Testing, Y_Testing_Base
def predictLSTM(ticker):
# Step 1. Load data
X_Training, Y_Training, X_Testing, Y_Testing, Y_Testing_Base = getDeepLearningData(ticker)
# Step 2. Build model
model = Sequential()
model.add(LSTM(
input_shape=1,
output_dim=50,
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(
200,
return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(output_dim=1))
model.add(Activation('linear'))
model.compile(lose='mse', optimizer='rmsprop')
# Step 3. Train model
model.fit(X_Training, Y_Training,
batch_size=512,
nb_epoch=5,
validation_split=0.05)
predictLSTM(ticker='MRIN')
我遇到一个错误:
文件“ /Users/yindeyong/Desktop/Django_Projects/envs/stockenv/lib/python3.6/site-packages/keras/engine/base_layer.py”,行147,位于 init batch_size,)+元组(kwargs ['input_shape']) TypeError:“ int”对象不可迭代
我尝试将 input_shape = 1 更改为 input_shape =(1,),然后出现另一个错误:
ValueError:输入0与lstm_1层不兼容:预期ndim = 3,找到的ndim = 2
答案 0 :(得分:1)
您不能传递input_shape
整数,它必须是可迭代的,例如(1,)
。
看来您的X_training形状不正确。您必须调整其形状以使其适合input_shape。
答案 1 :(得分:1)
LSTM是可以与序列
一起使用的递归网络序列必须具有 length 和 features ,您的输入形状必须包含以下两个:input_shape=(length, features)
。
还必须使用(sequences, length, features)
对数据进行相应的调整。
对于可变长度,可以使用input_shape=(None,features)
。