我正在尝试使用kreas预测股票价格。
这是代码:
import pandasimport numpyfrom keras.layers.core import Dense, Activation, Dropoutfrom keras.layers.recurrent import LSTMfrom keras.models import Sequentialimport matplotlib.pyplot as pltCONST_TRAINTING_SEQUENCE_LENGTH = 12CONST_TESTING_CASES = 5def 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. 加载数据 data = pandas.read_csv('/Users/yindeyong/Desktop/Django_Projects/pythonstock/data/Intraday/' + ticker + '.csv')[ 'close'].tolist() # Step 2. 构建训练数据 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. 构建测试数据 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. 重塑数据以供深度学习使用 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_Basedef predictLSTM(ticker): # Step 1. 加载数据 X_Training, Y_Training, X_Testing, Y_Testing, Y_Testing_Base = getDeepLearningData(ticker) # Step 2. 构建模型model = Sequential()model.add(LSTM( input_shape=1, dropout_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. 训练模型model.fit(X_Training, Y_Training, batch_size=512, nb_epoch=5, validation_split=0.05)
但是当我运行它时,我得到了一个错误:
使用TensorFlow后端。Traceback (most recent call last): File “/Users/yindeyong/Desktop/Django_Projects/pythonstock/deeplearningprediction.py”, line 127, in predictLSTM(ticker=’MRIN’) File “/Users/yindeyong/Desktop/Django_Projects/pythonstock/deeplearningprediction.py”, line 96, in predictLSTM return_sequences=True)) File “/Users/yindeyong/Desktop/Django_Projects/envs/stockenv/lib/python3.6/site-packages/keras/legacy/interfaces.py”, line 91, in wrapper return func(*args, **kwargs)
TypeError: init()缺少1个必需的位置参数: ‘units’ 进程以退出代码1结束
回答:
你需要在这个位置指定LSTM单元的数量
model.add(LSTM(200, input_shape=1, dropout_dim=50, return_sequences=True))
与你在下一层LSTM中所做的一样。