def train(): ''' Train CNN_tiny for a number of steps. ''' with tf.Graph().as_default(): # globalなstep数 global_step = tf.Variable(0, trainable=False) # 教師データ image_input = ImageInput('./data/101Caltech_shuffles.txt') print("the number of train data: %d" % (len(image_input.image_paths))) images = tf.placeholder(tf.float32, [None, 224, 224, 3]) labels = tf.placeholder(tf.float32, [None, 101]) keep_conv = tf.placeholder(tf.float32) keep_hidden = tf.placeholder(tf.float32) # graphのoutput logits, transform_result = model.inference(images, keep_conv, keep_hidden) # loss graphのoutputとlabelを利用 # loss = model.loss(logits, labels) loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits, labels)) predict_op = tf.argmax(logits, 1) # 学習オペレーション train_op = op.train(loss, global_step) # サマリー summary_op = tf.merge_all_summaries() # 初期化オペレーション init_op = tf.initialize_all_variables() # Session sess = tf.Session(config=tf.ConfigProto( log_device_placement=LOG_DEVICE_PLACEMENT)) # saver #saver = tf.train.Saver(tf.all_variables()) sess.run(init_op) # pretrainと全体を分けて保存 pretrain_params = {} train_params = {} for variable in tf.trainable_variables(): variable_name = variable.name #print("parameter: %s" %(variable_name)) scope, name = variable_name.split("/") target, _ = name.split(":") if variable_name.find('spatial_transformer') < 0: print("pretrain parameter: %s" % (variable_name)) pretrain_params[variable_name] = variable print("train parameter: %s" % (variable_name)) train_params[variable_name] = variable saver_cnn = tf.train.Saver(pretrain_params) saver_transformers = tf.train.Saver(train_params) # pretrained_model if FLAGS.fine_tune: ckpt = tf.train.get_checkpoint_state(PRETRAIN_DIR) if ckpt and ckpt.model_checkpoint_path: print("Pretrained Model Loading.") saver_cnn.restore(sess, ckpt.model_checkpoint_path) print("Pretrained Model Restored.") else: print("No Pretrained Model.") # pretrained model from another type models. # # saver # print type(tf.all_variables()) # for variable in tf.trainable_variables(): # variable_name = variable.name # variable_value = variable.eval(sess) # if variable_name.find('softmax_linear') < 0 and variable_name.find('spatial_transformer') < 0: # print("trained parameter: %s" %(variable_name)) # scope, name = variable_name.split("/") # target, _ = name.split(":") # with tf.variable_scope(scope, reuse=True): # sess.run(tf.get_variable(target).assign(variable_value)) # trained_model = FLAGS.trained_model # print trained_model coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) # サマリーのライターを設定 summary_writer = tf.train.SummaryWriter(TRAIN_DIR, graph_def=sess.graph_def) # max_stepまで繰り返し学習 for step in xrange(MAX_STEPS): start_time = time.time() previous_time = start_time index = 0 batches = image_input.get_batches(FLAGS.batch_size) for batch in batches: train = batch[0] label = batch[1] _, loss_value = sess.run([train_op, loss], feed_dict={ images: train, labels: label, keep_conv: 0.8, keep_hidden: 0.5 }) if index % 10 == 0: end_time = time.time() duration = end_time - previous_time num_examples_per_step = BATCH_SIZE * 10 examples_per_sec = num_examples_per_step / duration print( "%s: %d[epoch]: %d[iteration]: train loss %f: %d[examples/iteration]: %f[examples/sec]: %f[sec/iteration]" % (datetime.now(), step, index, loss_value, num_examples_per_step, examples_per_sec, duration)) index += 1 assert not np.isnan( loss_value), 'Model diverged with loss = NaN' # test_indices = np.arange(len(teX)) # Get A Test Batch # np.random.shuffle(test_indices) # test_indices = test_indices[0:5] print "=" * 20 testx = train[0:2] #print testx testy = label[0:2] print np.argmax(testy[0]) print np.argmax(testy[1]) output_vec, predict, cost_value = sess.run( [logits, predict_op, loss], feed_dict={ images: testx, labels: testy, keep_conv: 1.0, keep_hidden: 1.0 }) print predict print("test loss: %f" % (cost_value)) print "=" * 20 previous_time = end_time index += 1 assert not np.isnan( loss_value), 'Model diverged with loss = NaN' # 100回ごと if index % 100 == 0: pass summary_str = sess.run(summary_op, feed_dict={ images: train, labels: label, keep_conv: 0.8, keep_hidden: 0.5 }) # サマリーに書き込む summary_writer.add_summary(summary_str, step) if step % 1 == 0 or (step * 1) == MAX_STEPS: pretrain_checkpoint_path = PRETRAIN_DIR + '/model.ckpt' train_checkpoint_path = TRAIN_DIR + '/model.ckpt' saver_cnn.save(sess, pretrain_checkpoint_path, global_step=step) saver_transformers.save(sess, train_checkpoint_path, global_step=step) coord.request_stop() coord.join(threads) sess.close()
def train(): ''' Train Network for a number of steps. ''' with tf.Graph().as_default(): # globalなstep数 global_step = tf.Variable(0, trainable=False) # 教師データ if FLAGS.training_data_type == 0: # directory feed inputs image_input = ImageInput('caltech_samples_random.txt') images = tf.placeholder(tf.float32, shape=(FLAGS.batch_size, FLAGS.crop_size, FLAGS.crop_size, FLAGS.image_depth)) labels = tf.placeholder(tf.int32, shape=(FLAGS.batch_size, )) learning_rate_node = tf.placeholder(tf.float32, shape=[]) elif FLAGS.training_data_type == 1: # tfrecords inputs images, labels = data_inputs.distorted_inputs(TF_RECORDS) # graphのoutput # net, logits = model.inference(images) logits = model.inference(images) # loss graphのoutputとlabelを利用 loss = model.loss(logits, labels) # 学習オペレーション train_op = op.train(loss, global_step) # バリデーション用 --> evalに移動するべき # top_k_op = tf.nn.in_top_k(logits, labels, 1) # saver saver = tf.train.Saver(tf.all_variables()) # サマリー summary_op = tf.merge_all_summaries() # 初期化オペレーション init_op = tf.initialize_all_variables() # Session sess = tf.Session(config=tf.ConfigProto( log_device_placement=LOG_DEVICE_PLACEMENT)) sess.run(init_op) # 学習済みパラメータのロード if FINE_TUNING: print('fine tuning. trained_model: %s' % (FLAGS.trained_model)) #net.load(FLAGS.trained_model, sess) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) # サマリーのライターを設定 summary_writer = tf.train.SummaryWriter(TRAIN_DIR, graph_def=sess.graph_def) # max_stepまで繰り返し学習 for step in xrange(MAX_STEPS): start_time = time.time() # directory feed inputs if FLAGS.training_data_type == 0: train_images, train_labels = image_input.batches( FLAGS.batch_size) #print train_images print train_labels _, loss_value = sess.run( [train_op, loss], feed_dict={ images: train_images, labels: train_labels, learning_rate_node: FLAGS.learning_rate }) elif FLAGS.training_data_type == 1: # tfrecords inputs #print kernel1.eval(session=sess) _, loss_value = sess.run([train_op, loss]) duration = time.time() - start_time assert not np.isnan(loss_value), 'Model diverged with loss = NaN' # 10回ごと if step % 10 == 0: # stepごとの事例数 = mini batch size num_examples_per_step = BATCH_SIZE # 1秒ごとの事例数 examples_per_sec = num_examples_per_step / duration # バッチごとの時間 sec_per_batch = float(duration) # time, step数, loss, 1秒で実行できた事例数, バッチあたりの時間 format_str = '$s: step %d, loss = %.2f (%.1f examples/sec; %.3f sec/batch)' print str(datetime.now()) + ': step' + str( step) + ', loss= ' + str(loss_value) + ' ' + str( examples_per_sec) + ' examples/sec; ' + str( sec_per_batch) + ' sec/batch ' # 100回ごと if step % 10 == 0: if FLAGS.training_data_type == 0: summary_str = sess.run(summary_op, feed_dict={ images: train_images, labels: train_labels }) elif FLAGS.training_data_type == 1: summary_str = sess.run(summary_op) # サマリーに書き込む #print sumary_str summary_writer.add_summary(summary_str, step) if step % 1000 == 0 or (step * 1) == MAX_STEPS: checkpoint_path = TRAIN_DIR + '/model.ckpt' saver.save(sess, checkpoint_path, global_step=step) coord.request_stop() coord.join(threads) sess.close()
def train(): ''' Train CNN_tiny for a number of steps. ''' with tf.Graph().as_default(): # globalなstep数 global_step = tf.Variable(0, trainable=False) # 教師データ image_input = ImageInput('./data/101Caltech_shuffles.txt') print("the number of train data: %d" % (len(image_input.image_paths))) images = tf.placeholder(tf.float32, [None, 224, 224, 3]) labels = tf.placeholder(tf.float32, [None, 101]) keep_conv = tf.placeholder(tf.float32) keep_hidden = tf.placeholder(tf.float32) # graphのoutput logits, transform_result = model.inference(images, keep_conv, keep_hidden) # loss graphのoutputとlabelを利用 # loss = model.loss(logits, labels) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, labels)) predict_op = tf.argmax(logits, 1) # 学習オペレーション train_op = op.train(loss, global_step) # サマリー summary_op = tf.merge_all_summaries() # 初期化オペレーション init_op = tf.initialize_all_variables() # Session sess = tf.Session(config=tf.ConfigProto(log_device_placement=LOG_DEVICE_PLACEMENT)) # saver #saver = tf.train.Saver(tf.all_variables()) sess.run(init_op) # pretrainと全体を分けて保存 pretrain_params = {} train_params = {} for variable in tf.trainable_variables(): variable_name = variable.name #print("parameter: %s" %(variable_name)) scope, name = variable_name.split("/") target, _ = name.split(":") if variable_name.find('spatial_transformer') < 0: print("pretrain parameter: %s" %(variable_name)) pretrain_params[variable_name] = variable print("train parameter: %s" %(variable_name)) train_params[variable_name] = variable saver_cnn = tf.train.Saver(pretrain_params) saver_transformers = tf.train.Saver(train_params) # pretrained_model if FLAGS.fine_tune: ckpt = tf.train.get_checkpoint_state(PRETRAIN_DIR) if ckpt and ckpt.model_checkpoint_path: print("Pretrained Model Loading.") saver_cnn.restore(sess, ckpt.model_checkpoint_path) print("Pretrained Model Restored.") else: print("No Pretrained Model.") # pretrained model from another type models. # # saver # print type(tf.all_variables()) # for variable in tf.trainable_variables(): # variable_name = variable.name # variable_value = variable.eval(sess) # if variable_name.find('softmax_linear') < 0 and variable_name.find('spatial_transformer') < 0: # print("trained parameter: %s" %(variable_name)) # scope, name = variable_name.split("/") # target, _ = name.split(":") # with tf.variable_scope(scope, reuse=True): # sess.run(tf.get_variable(target).assign(variable_value)) # trained_model = FLAGS.trained_model # print trained_model coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) # サマリーのライターを設定 summary_writer = tf.train.SummaryWriter(TRAIN_DIR, graph_def=sess.graph_def) # max_stepまで繰り返し学習 for step in xrange(MAX_STEPS): start_time = time.time() previous_time = start_time index = 0 batches = image_input.get_batches(FLAGS.batch_size) for batch in batches: train = batch[0] label = batch[1] _, loss_value = sess.run([train_op, loss], feed_dict={images: train, labels: label, keep_conv: 0.8, keep_hidden: 0.5}) if index % 10 == 0: end_time = time.time() duration = end_time - previous_time num_examples_per_step = BATCH_SIZE * 10 examples_per_sec = num_examples_per_step / duration print("%s: %d[epoch]: %d[iteration]: train loss %f: %d[examples/iteration]: %f[examples/sec]: %f[sec/iteration]" % (datetime.now(), step, index, loss_value, num_examples_per_step, examples_per_sec, duration)) index += 1 assert not np.isnan(loss_value), 'Model diverged with loss = NaN' # test_indices = np.arange(len(teX)) # Get A Test Batch # np.random.shuffle(test_indices) # test_indices = test_indices[0:5] print "="*20 testx = train[0:2] #print testx testy = label[0:2] print np.argmax(testy[0]) print np.argmax(testy[1]) output_vec, predict, cost_value = sess.run([logits, predict_op, loss], feed_dict={images: testx, labels: testy, keep_conv: 1.0, keep_hidden: 1.0}) print predict print("test loss: %f" % (cost_value)) print "="*20 previous_time = end_time index += 1 assert not np.isnan(loss_value), 'Model diverged with loss = NaN' # 100回ごと if index % 100 == 0: pass summary_str = sess.run(summary_op, feed_dict={images: train, labels: label, keep_conv: 0.8, keep_hidden: 0.5}) # サマリーに書き込む summary_writer.add_summary(summary_str, step) if step % 1 == 0 or (step * 1) == MAX_STEPS: pretrain_checkpoint_path = PRETRAIN_DIR + '/model.ckpt' train_checkpoint_path = TRAIN_DIR + '/model.ckpt' saver_cnn.save(sess, pretrain_checkpoint_path, global_step=step) saver_transformers.save(sess, train_checkpoint_path, global_step=step) coord.request_stop() coord.join(threads) sess.close()
def train(): ''' Train Network for a number of steps. ''' with tf.Graph().as_default(): # globalなstep数 global_step = tf.Variable(0, trainable=False) # 教師データ if FLAGS.training_data_type == 0: # directory feed inputs image_input = ImageInput('caltech_samples_random.txt') images = tf.placeholder(tf.float32, shape=(FLAGS.batch_size, FLAGS.crop_size, FLAGS.crop_size, FLAGS.image_depth)) labels = tf.placeholder(tf.int32, shape=(FLAGS.batch_size,)) learning_rate_node = tf.placeholder(tf.float32, shape=[]) elif FLAGS.training_data_type == 1: # tfrecords inputs images, labels = data_inputs.distorted_inputs(TF_RECORDS) # graphのoutput # net, logits = model.inference(images) logits = model.inference(images) # loss graphのoutputとlabelを利用 loss = model.loss(logits, labels) # 学習オペレーション train_op = op.train(loss, global_step) # バリデーション用 --> evalに移動するべき # top_k_op = tf.nn.in_top_k(logits, labels, 1) # saver saver = tf.train.Saver(tf.all_variables()) # サマリー summary_op = tf.merge_all_summaries() # 初期化オペレーション init_op = tf.initialize_all_variables() # Session sess = tf.Session(config=tf.ConfigProto(log_device_placement=LOG_DEVICE_PLACEMENT)) sess.run(init_op) # 学習済みパラメータのロード if FINE_TUNING: print('fine tuning. trained_model: %s' % (FLAGS.trained_model)) #net.load(FLAGS.trained_model, sess) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) # サマリーのライターを設定 summary_writer = tf.train.SummaryWriter(TRAIN_DIR, graph_def=sess.graph_def) # max_stepまで繰り返し学習 for step in xrange(MAX_STEPS): start_time = time.time() # directory feed inputs if FLAGS.training_data_type == 0: train_images, train_labels = image_input.batches(FLAGS.batch_size) #print train_images print train_labels _, loss_value = sess.run([train_op, loss], feed_dict={images: train_images, labels:train_labels, learning_rate_node: FLAGS.learning_rate}) elif FLAGS.training_data_type == 1: # tfrecords inputs #print kernel1.eval(session=sess) _, loss_value = sess.run([train_op, loss]) duration = time.time() - start_time assert not np.isnan(loss_value), 'Model diverged with loss = NaN' # 10回ごと if step % 10 == 0: # stepごとの事例数 = mini batch size num_examples_per_step = BATCH_SIZE # 1秒ごとの事例数 examples_per_sec = num_examples_per_step / duration # バッチごとの時間 sec_per_batch = float(duration) # time, step数, loss, 1秒で実行できた事例数, バッチあたりの時間 format_str = '$s: step %d, loss = %.2f (%.1f examples/sec; %.3f sec/batch)' print str(datetime.now()) + ': step' + str(step) + ', loss= '+ str(loss_value) + ' ' + str(examples_per_sec) + ' examples/sec; ' + str(sec_per_batch) + ' sec/batch ' # 100回ごと if step % 10 == 0: if FLAGS.training_data_type == 0: summary_str = sess.run(summary_op, feed_dict={images: train_images, labels:train_labels}) elif FLAGS.training_data_type == 1: summary_str = sess.run(summary_op) # サマリーに書き込む #print sumary_str summary_writer.add_summary(summary_str, step) if step % 1000 == 0 or (step * 1) == MAX_STEPS: checkpoint_path = TRAIN_DIR + '/model.ckpt' saver.save(sess, checkpoint_path, global_step=step) coord.request_stop() coord.join(threads) sess.close()