o log device placement.""") tf.app.flags.DEFINE_integer('num_preprocess_threads', 4, 'Number of preprocessing threads') tf.app.flags.DEFINE_string('optim', 'Momentum', 'Optimizer') tf.app.flags.DEFINE_integer('image_size', 227, 'Image size') tf.app.flags.DEFINE_float('eta', 0.01, 'Learning rate') tf.app.flags.DEFINE_float('pdrop', 0., 'Dropout probability') tf.app.flags.DEFINE_integer('max_steps', 40000, 'Number of iterations') tf.app.flags.DEFINE_integer('steps_per_decay', 10000, 'Number of steps before learning rate decay') tf.app.flags.DEFINE_float('eta_decay_rate', 0.1, 'Learning rate decay') tf.app.flags.DEFINE_integer('epochs', -1, 'Number of epochs') tf.app.flags.DEFINE_integer('batch_size', 128, 'Batch size') tf.app.flags.DEFINE_string('checkpoint', 'checkpoint', 'Checkpoint name') tf.app.flags.DEFINE_string('model_type', 'default', 'Type of convnet') tf.app.flags.DEFINE_string('pre_model', '',#'./inception_v3.ckpt', 'checkpoint file') FLAGS = tf.app.flags.FLAGS # Every 5k steps cut learning rate in half def exponential_staircase_decay(at_step=10000, decay_rate=0.1): print('decay [%f] every [%d] steps' % (decay_rate, at_step)) def _decay(lr, global_step): return tf.train.exponential_decay(lr, global_step, at_step, decay_rate, staircase=True) return _decay def optimizer(optim, eta, loss_fn, at_step, decay_rate): global_step = tf.Variable(0, trainable=False) optz = optim if optim == 'Adadelta': optz = lambda lr: tf.train.AdadeltaOptimizer(lr, 0.95, 1e-6) lr_decay_fn = None elif optim == 'Momentum': optz = lambda lr: tf.train.MomentumOptimizer(lr, MOM) lr_decay_fn = exponential_staircase_decay(at_step, decay_rate) return tf.contrib.layers.optimize_loss(loss_fn, global_step, eta, optz, clip_gradients=4., learning_rate_decay_fn=lr_decay_fn) def loss(logits, labels): labels = tf.cast(labels, tf.int32) cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits( logits=logits, labels=labels, name='cross_entropy_per_example') cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy') tf.add_to_collection('losses', cross_entropy_mean) losses = tf.get_collection('losses') regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) total_loss = cross_entropy_mean + LAMBDA * sum(regularization_losses) tf.summary.scalar('tl (raw)', total_loss) #total_loss = tf.add_n(losses + regularization_losses, name='total_loss') loss_averages = tf.train.ExponentialMovingAverage(0.9, name='avg') loss_averages_op = loss_averages.apply(losses + [total_loss]) for l in losses + [total_loss]: tf.summary.scalar(l.op.name + ' (raw)', l) tf.summary.scalar(l.op.name, loss_averages.average(l)) with tf.control_dependencies([loss_averages_op]): total_loss = tf.identity(total_loss) return total_loss def main(argv=None): with tf.Graph().as_default(): model_fn = select_model(FLAGS.model_type) # Open the metadata file and figure out nlabels, and size of epoch # 打开元数据文件md.json,这个文件是在预处理数据时生成。找出nlabels、epoch大小 input_file = os.path.join(FLAGS.train_dir, 'md.json') print(input_file) with open(input_file, 'r') as f: md = json.load(f) images, labels, _ = distorted_inputs(FLAGS.train_dir, FLAGS.batch_size, FLAGS.image_size, FLAGS.num_preprocess_threads) logits = model_fn(md['nlabels'], images, 1-FL |