尝试通过LSTM模型使用新闻和股票数据预测股票。 型号代码:
filter_length1 = 3
filter_length2 = 5
dropout = 0.5
learning_rate = 0.0001
weights = initializers.TruncatedNormal(mean=0.0, stddev=0.1, seed=2)
nb_filter = 16
rnn_output_size = 128
hidden_dims = 128
wider = True
deeper = True
if wider == True:
nb_filter *= 2
rnn_output_size *= 2
hidden_dims *= 2
def build_model():
model1 = Sequential()
model1.add(Embedding(nb_words,
embedding_dim,
weights=[word_embedding_matrix],
input_length=max_daily_length))
model1.add(Dropout(dropout))
model1.add(Convolution1D(filters = nb_filter,
kernel_size = filter_length1,
padding = 'same',
activation = 'relu'))
model1.add(Dropout(dropout))
if deeper == True:
model1.add(Convolution1D(filters = nb_filter,
kernel_size = filter_length1,
padding = 'same',
activation = 'relu'))
model1.add(Dropout(dropout))
model1.add(LSTM(rnn_output_size,
activation=None,
kernel_initializer=weights,
dropout = dropout))
####
model2 = Sequential()
model2.add(Embedding(nb_words,
embedding_dim,
weights=[word_embedding_matrix],
input_length=max_daily_length))
model2.add(Dropout(dropout))
model2.add(Convolution1D(filters = nb_filter,
kernel_size = filter_length2,
padding = 'same',
activation = 'relu'))
model2.add(Dropout(dropout))
if deeper == True:
model2.add(Convolution1D(filters = nb_filter,
kernel_size = filter_length2,
padding = 'same',
activation = 'relu'))
model2.add(Dropout(dropout))
model2.add(LSTM(rnn_output_size,
activation=None,
kernel_initializer=weights,
dropout = dropout))
####
model = Sequential()
model = Add()([model1.output, model2.output])
model = Dense(hidden_dims, kernel_initializer=weights)(model)
model = Dropout(dropout)(model)
if deeper == True:
model = Dense(hidden_dims//2, kernel_initializer=weights)(model)
model = Dropout(dropout)(model)
model = Dense(1, kernel_initializer = weights, name='output')(model)
new_model = Model([model1.input, model2.input], model)
new_model.compile(loss='mean_squared_error', optimizer=Adam(lr=learning_rate, clipvalue=1.0))
return new_model
使用模型的代码:
# Use grid search to help find a better model
for deeper in [False]:
for wider in [True,False]:
for learning_rate in [0.0001]:
for dropout in [0.3, 0.5]:
model = build_model()
print()
print("Current model: Deeper={}, Wider={}, LR={}, Dropout={}".format(
deeper,wider,learning_rate,dropout))
print()
save_best_weights = 'question_pairs_weights_deeper={}_wider={}_lr={}_dropout={}.h5'.format(
deeper,wider,learning_rate,dropout)
callbacks = [ModelCheckpoint(save_best_weights, monitor='val_loss', save_best_only=True),
EarlyStopping(monitor='val_loss', patience=5, verbose=1, mode='auto'),
ReduceLROnPlateau(monitor='val_loss', factor=0.2, verbose=1, patience=3)]
history = model.fit([x_train,x_train],
y_train,
batch_size=64,
epochs=10,
validation_split=0.15,
verbose=True,
shuffle=True,
callbacks = callbacks)
尝试降低lr,调整clipvalue ..................................................... ................. ................................................... ......................................