http://qiita.com/northriver/items/4f4690053e1770311335
Je suis habitué au tensorlfow, alors je vais essayer de prédire le cours de l'action avec le deeplearning. Créez une date d'enregistrement et utilisez le cours de l'action des 90 derniers jours (les jours ouvrables) et le cours de l'action 30 jours plus tard pour sortir des actions susceptibles d'augmenter.
Les bonnes réponses après 30 jours ont été sélectionnées comme étant x% plus élevées, plus faibles ou entre-temps par rapport à la norme. J'ai décidé de le résoudre comme un problème de classification.
Tout d'abord, créez les fonctions nécessaires avec deux couches cachées
import tensorflow as tf
import numpy as np
sess = tf.InteractiveSession()
def inference(x_placeholder,SCORE_SIZE,NUM_HIDDEN1,NUM_OUTPUT,keep_prob):
with tf.name_scope('hidden1') as scope:
hidden1_weight = tf.Variable(tf.truncated_normal([SCORE_SIZE, NUM_HIDDEN1], stddev=0.1), name="hidden1_weight")
hidden1_bias = tf.Variable(tf.constant(0.1, shape=[NUM_HIDDEN1]), name="hidden1_bias")
mean1, variance1 = tf.nn.moments(x_placeholder,[0])
bn1 = tf.nn.batch_normalization(x_placeholder, mean1, variance1, None, None, 1e-5)
hidden1_output = tf.nn.relu(tf.matmul(bn1, hidden1_weight) + hidden1_bias)
with tf.name_scope('hidden2'):
hidden2_weight = tf.Variable(tf.truncated_normal([NUM_HIDDEN1, NUM_HIDDEN2], stddev=0.01), name='hidden2_weight')
hidden2_bias = tf.Variable(tf.constant(0.1, shape=[NUM_HIDDEN2]), name="hidden2_bias")
mean2, variance2 = tf.nn.moments(hidden1_output,[0])
bn2 = tf.nn.batch_normalization(hidden1_output, mean2, variance2, None, None, 1e-5)
hidden2_output = tf.nn.relu(tf.matmul(bn2, hidden2_weight) + hidden2_bias)
dropout = tf.nn.dropout(hidden1_output, keep_prob)
with tf.name_scope('output') as scope:
output_weight = tf.Variable(tf.truncated_normal([NUM_HIDDEN1, NUM_OUTPUT], stddev=0.1), name="output_weight")
output_bias = tf.Variable(tf.constant(0.1, shape=[NUM_OUTPUT]), name="output_bias")
mean_out, variance_out = tf.nn.moments(dropout,[0])
bn_out = tf.nn.batch_normalization(dropout, mean_out, variance_out, None, None, 1e-5)
output = tf.nn.softmax(tf.matmul(bn_out, output_weight) + output_bias)
return output
def loss(output, y_placeholder, loss_label_placeholder):
with tf.name_scope('loss') as scope:
loss = tf.reduce_mean(-tf.reduce_sum(y_placeholder * tf.log(tf.clip_by_value(output,1e-10,1.0)), reduction_indices=[1]))
return loss
def training(loss,rate):
with tf.name_scope('training') as scope:
train_step = tf.train.GradientDescentOptimizer(rate).minimize(loss)
return train_step
Ici, j'ai fait attention qu'il vaut mieux faire une normalisation par lots, j'ai donc essayé de creuser dans toutes les couches
Le nombre de couches cachées et le taux d'apprentissage sont appropriés et seront ajustés à l'avenir. Courir!
rate=0.08
SCORE_SIZE=90
NUM_OUTPUT=3
NUM_HIDDEN1=90
NUM_HIDDEN2=45
y_placeholder = tf.placeholder("float", [None, NUM_OUTPUT], name="y_placeholder")
x_placeholder = tf.placeholder("float", [None, SCORE_SIZE], name="x_placeholder")
loss_label_placeholder = tf.placeholder("string", name="loss_label_placeholder")
keep_prob = tf.placeholder("float")
output = inference(x_placeholder,SCORE_SIZE,NUM_HIDDEN1,NUM_OUTPUT,keep_prob)
loss1 = loss(output, y_placeholder, loss_label_placeholder)
training_op = training(loss1,rate)
correct_prediction = tf.equal(tf.argmax(output,1), tf.argmax(y_placeholder,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
best_loss = float("inf")
sess.run(tf.initialize_all_variables())
for step in range(1001):
x_train,y_train,c_train=train_data_make(SCORE_SIZE,200)
feed_dict_train={y_placeholder: y_train,x_placeholder: x_train,keep_prob: 0.8}
feed_dict_test={y_placeholder: y_test,x_placeholder: x_test, keep_prob: 1.0}
if step%100 == 0:print "size %d,step %d,rate %g loss %g,test accuracy %g"%(num_long,step,rate,loss1.eval(feed_dict=feed_dict_train),accuracy.eval(feed_dict=feed_dict_test))
sess.run(training_op, feed_dict=feed_dict_train)
#test_result
print "final_result : size %d,step %d, test accuracy %g"%(num_long,step,accuracy.eval(feed_dict=feed_dict_test))
En conséquence, 9 sont alloués ... Eh bien, la plupart des stocks ne changent pas en un mois, donc cela peut être dû à aucun changement. Au contraire, 90% des données de test ont été classées sans changement ...
size 90,step 0,rate 0.08 loss 1.31044,test accuracy 0.257594
size 90,step 100,rate 0.08 loss 0.369047,test accuracy 0.91373
size 90,90,step 200,rate 0.08 loss 0.249306,test accuracy 0.90887
・ ・ ・
Jetons un coup d'œil aux types de chiffres donnés pour chaque stock. Après tout, il y avait beaucoup d'attentes que cela ne changerait pas, mais ... cette? Si vous les classez par ordre décroissant de probabilité d'augmentation, certains stocks devraient le faire.
Est-ce aussi un mouvement unique avant que le cours de l'action ne monte?
Je voudrais voir la situation pendant un moment et observer si elle monte vraiment.
Selon ce qui suit, il semble que la taille du lot devrait être plus petite http://postd.cc/26-things-i-learned-in-the-deep-learning-summer-school/ (Veuillez investir dans des actions à vos propres risques. Les articles ne sont pas du tout responsables)
Recommended Posts