C'est un jeu pour essayer de prédire même le nombre de loterie 6 en utilisant le deep learning. Bien sûr, la loterie ne donne que des nombres aléatoires à chaque fois, donc cela ne devrait pas fonctionner, mais il semble que certaines personnes s'y attendent sérieusement, et j'ai écrit le code rapidement, donc plutôt que de l'enterrer dans le disque dur. Je vais le publier. Je ne le fais pas très au sérieux, donc l'explication est également appropriée. Veuillez commenter si vous avez des inquiétudes.
Je me demandais quoi entrer, mais j'ai choisi les numéros gagnants pour les 5 dernières fois. Le Lotto 6 est un mécanisme où 6 sont sélectionnés parmi 43 numéros, et si les 6 sont gagnés, le premier prix est donné. Ainsi, la sortie est de 43 indicateurs, par exemple, si 1,3,4,11,20,43 est le numéro gagnant, [1,0,1,1,0,0, ..... 0, J'ai supposé m'attendre à un drapeau comme 0,1]. (Strictement parlant, c'est un peu différent car ça passe par Softmax) Les données ont été collectées par grattage du site Web de Mizuho Bank. Ce sera environ 1000 données.
TensorFlow 0.7 Ubuntu 14.04 AWS EC2 microinstance
Seules les parties susceptibles d'être des points sont extraites.
Il y a deux couches cachées et le nombre d'unités est de 1000 et 500, respectivement. La sortie est 43.
def inference(x_ph, keep_prob):
with tf.name_scope('hidden1'):
weights = tf.Variable(tf.truncated_normal([data_num * NUM_CLASSES, NUM_HIDDEN1], stddev=stddev), name='weights')
biases = tf.Variable(tf.zeros([NUM_HIDDEN1]), name='biases')
hidden1 = tf.nn.relu(tf.matmul(x_ph, weights) + biases)
with tf.name_scope('hidden2'):
weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN1, NUM_HIDDEN2], stddev=stddev), name='weights')
biases = tf.Variable(tf.zeros([NUM_HIDDEN2]), name='biases')
hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)
# DropOut
dropout = tf.nn.dropout(hidden2, keep_prob)
with tf.name_scope('softmax'):
weights = tf.Variable(tf.truncated_normal([NUM_HIDDEN2, NUM_CLASSES], stddev=stddev), name='weights')
biases = tf.Variable(tf.zeros([NUM_CLASSES]), name='biases')
y = tf.nn.softmax(tf.matmul(dropout, weights) + biases)
return y
Partie de calcul des pertes. L'étiquette de réponse correcte (cible) est un indicateur de 0 ou 1, mais comme y passe par softmax, c'est un brouillard qui ajoute jusqu'à 1 dans son ensemble, et comme l'échelle ne correspond pas telle qu'elle est, la cible passe également par softmax. ..
def loss(y, target):
softmax_target = tf.nn.softmax(target)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, softmax_target, name='xentropy')
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
return loss
Entraînement.
def training(sess, train_step, loss, x_train_array, y_train_array):
summary_op = tf.merge_all_summaries()
init = tf.initialize_all_variables()
sess.run(init)
summary_writer = tf.train.SummaryWriter(LOG_DIR, graph_def=sess.graph_def)
for i in range(int(len(x_train_array) / bach_size)):
batch_xs = getBachArray(x_train_array, i * bach_size, bach_size)
batch_ys = getBachArray(y_train_array, i * bach_size, bach_size)
sess.run(train_step, feed_dict={x_ph: batch_xs, y_ph: batch_ys, keep_prob: 0.8})
ce = sess.run(loss, feed_dict={x_ph: batch_xs, y_ph: batch_ys, keep_prob: 1.0})
summary_str = sess.run(summary_op, feed_dict={x_ph: batch_xs, y_ph: batch_ys, keep_prob: 1.0})
summary_writer.add_summary(summary_str, i)
perte Vous pouvez voir que ce n'est pas devenu un gâchis (rires) J'ai appris que ce serait comme ça si je ne pouvais pas m'en empêcher.
Je sais que c'est totalement inutile, mais prévoyons-le. Prédisons le 1046e en utilisant les données du 1045e au 1041e. L'entrée ressemble à ce qui suit
[[01,19,21,30,31,43],[03,07,16,26,34,39],[21,29,30,32,38,42],[04,10,11,12,18,25],[14,22,27,29,33,37]]
Le résultat est ci-dessous.
[6, 10, 12, 23, 27, 38]
Les numéros gagnants réels sont [06, 13, 17, 18, 27, 43]. J'en frappe deux. Au fait, il en coûte 1000 yens pour en atteindre trois. Je ne sais pas combien de hits sont la moyenne (je ne sais pas comment calculer), mais jetons les attentes étranges.
Recommended Posts