前提・実現したいこと
pythonで機械学習のプログラムを作るうえで
一変数ではなく、多変数のデータを読み込んで実行したい
一変数でのプログラムは作って実行もできたので、そこに何かを付け足せばいいのか
または新しく作り直さなければならないのかを知りたく、またそうするにはどうすればいいかを教えてほしいです
該当のソースコード
python
1import tensorflow as tf 2import numpy as np 3import random 4 5 6num_of_input_nodes = 1 7num_of_hidden_nodes = 80 8num_of_output_nodes = 1 9length_of_sequences = 10 ← 学習・識別時の時系列データ数(area.txtとarea2.txtの列数) 10num_of_training_epochs = 5000 ← 学習回数 11size_of_mini_batch = 10 12num_of_prediction_epochs = 107 ← 識別ファイル(area2.txtとseikai2.txtの行数) 13learning_rate = 0.01 14forget_bias = 0.8 15num_of_sample = 109 ← 学習ファイル(area.txtとseikai.txtの行数) 16 17 18def get_batch(batch_size, X, t): 19 rnum = [random.randint(0, len(X) - 1) for x in range(batch_size)] 20 xs = np.array([[[y] for y in list(X[r])] for r in rnum]) 21 ts = np.array([[t[r]] for r in rnum]) 22 return xs, ts 23 24 25def create_data(nb_of_samples, sequence_len): 26 X = np.loadtxt('area.txt') ← 学習データファイルの読込み 27 t = np.loadtxt('seikai.txt') ← 学習正解値ファイルの読込み 28 print(X) 29 print(t) 30 return X, t 31 32 33def make_prediction(nb_of_samples): 34 xs = np.loadtxt('area2.txt') ← 識別データファイルの読込み 35 ts = np.loadtxt('seikai2.txt') ← 識別正解値データファイルの読込み(正解率計算用。実際の使用時は正解値は使用しない) 36 return np.array([[[y] for y in x] for x in xs]), np.array([[x] for x in ts]) 37 38 39def inference(input_ph, istate_ph): 40 with tf.name_scope("inference") as scope: 41 weight1_var = tf.Variable(tf.truncated_normal( 42 [num_of_input_nodes, num_of_hidden_nodes], stddev=0.1), name="weight1") 43 weight2_var = tf.Variable(tf.truncated_normal( 44 [num_of_hidden_nodes, num_of_output_nodes], stddev=0.1), name="weight2") 45 bias1_var = tf.Variable(tf.truncated_normal([num_of_hidden_nodes], stddev=0.1), name="bias1") 46 bias2_var = tf.Variable(tf.truncated_normal([num_of_output_nodes], stddev=0.1), name="bias2") 47 48 in1 = tf.transpose(input_ph, [1, 0, 2]) 49 in2 = tf.reshape(in1, [-1, num_of_input_nodes]) 50 in3 = tf.matmul(in2, weight1_var) + bias1_var 51 in4 = tf.split(in3, length_of_sequences, 0) 52 53 cell = tf.nn.rnn_cell.BasicLSTMCell(num_of_hidden_nodes, forget_bias=forget_bias, state_is_tuple=False) 54 rnn_output, states_op = tf.contrib.rnn.static_rnn(cell, in4, initial_state=istate_ph) 55 output_op = tf.matmul(rnn_output[-1], weight2_var) + bias2_var 56 57 # Add summary ops to collect data 58 w1_hist = tf.summary.histogram("weights1", weight1_var) 59 w2_hist = tf.summary.histogram("weights2", weight2_var) 60 b1_hist = tf.summary.histogram("biases1", bias1_var) 61 b2_hist = tf.summary.histogram("biases2", bias2_var) 62 output_hist = tf.summary.histogram("output", output_op) 63 results = [weight1_var, weight2_var, bias1_var, bias2_var] 64 return output_op, states_op, results 65 66 67def loss(output_op, supervisor_ph): 68 with tf.name_scope("loss") as scope: 69 square_error = tf.reduce_mean(tf.square(output_op - supervisor_ph)) 70 loss_op = square_error 71 tf.summary.scalar("loss", loss_op) 72 return loss_op 73 74 75def training(loss_op): 76 with tf.name_scope("training") as scope: 77 training_op = optimizer.minimize(loss_op) 78 return training_op 79 80 81def calc_accuracy(output_op, prints=False): 82 inputs, ts = make_prediction(num_of_prediction_epochs) 83 pred_dict = { 84 input_ph: inputs, 85 supervisor_ph: ts, 86 istate_ph: np.zeros((num_of_prediction_epochs, num_of_hidden_nodes * 2)), 87 } 88 output = sess.run([output_op], feed_dict=pred_dict) 89 90 def print_result(i, p, q): 91 [print(list(x)[0]) for x in i] 92 print("output: %f, correct: %d" % (p, q)) 93 if prints: 94 [print_result(i, p, q) for i, p, q in zip(inputs, output[0], ts)] 95 96 opt = abs(output - ts)[0] 97 total = sum([1 if x[0] < 0.5 else 0 for x in opt]) ← 0.05から0.5に変更 98 print("accuracy %f" % (total / float(len(ts)))) 99 return output 100 101random.seed(0) 102np.random.seed(0) 103tf.set_random_seed(0) 104 105optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) 106 107X, t = create_data(num_of_sample, length_of_sequences) 108 109with tf.Graph().as_default(): 110 input_ph = tf.placeholder(tf.float32, [None, length_of_sequences, num_of_input_nodes], name="input") 111 supervisor_ph = tf.placeholder(tf.float32, [None, num_of_output_nodes], name="supervisor") 112 istate_ph = tf.placeholder(tf.float32, [None, num_of_hidden_nodes * 2], name="istate") 113 114 output_op, states_op, datas_op = inference(input_ph, istate_ph) 115 loss_op = loss(output_op, supervisor_ph) 116 training_op = training(loss_op) 117 118 summary_op = tf.summary.merge_all() 119 init = tf.initialize_all_variables() 120 121 with tf.Session() as sess: 122 saver = tf.train.Saver() 123 summary_writer = tf.summary.FileWriter("/tmp/tensorflow_log", graph=sess.graph) 124 sess.run(init) 125 126 for epoch in range(num_of_training_epochs): 127 inputs, supervisors = get_batch(size_of_mini_batch, X, t) 128 train_dict = { 129 input_ph: inputs, 130 supervisor_ph: supervisors, 131 istate_ph: np.zeros((size_of_mini_batch, num_of_hidden_nodes * 2)), 132 } 133 sess.run(training_op, feed_dict=train_dict) 134 135 if (epoch) % 100 == 0: 136 summary_str, train_loss = sess.run([summary_op, loss_op], feed_dict=train_dict) 137 print("train#%d, train loss: %e" % (epoch, train_loss)) 138 summary_writer.add_summary(summary_str, epoch) 139 if (epoch) % 500 == 0: 140 calc_accuracy(output_op) 141 142 calc_accuracy(output_op, prints=True) 143 datas = sess.run(datas_op) 144 saver.save(sess, "model.ckpt")
あなたの回答
tips
プレビュー