Как натренировать alexnet с tenorflow slim? - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь решить задачу идентификации породы собак на Kaggle.Я использую tenorflow slim для обучения alexnet для решения проблемы.Но я продолжаю сталкиваться с проблемой.Потеря продолжает расти, а не уменьшаться.Я проверил свою предварительную обработку, и кажется, все в порядке.Скорость обучения тоже не очень высокая.Это ядро ​​kaggle, где я написал код Kaggle Dog Breed Kernel .Я также включаю код, который я использую для обучения ниже, если вы не можете использовать kaggle.

with graph.as_default():

tf_train_dataset = tf.placeholder(tf.float32, shape=(batchsize, height, width,channels))
tf_train_labels = tf.placeholder(tf.float32, shape=(batchsize, num_labels))
tf_validation_dataset = tf.constant(valid_dataset,dtype=tf.float32)
#tf_validation_dataset = tf.placeholder(tf.float32, shape=(valid_dataset.shape[0], height, width,channels))
tf_test_dataset = tf.constant(test_dataset)

def model(data,is_training=True, reusevar = False):
        with slim.arg_scope(alexnet.alexnet_v2_arg_scope()):
            with tf.variable_scope('model') as scope:
                if reusevar:
                    scope.reuse_variables()
                    outputs, end_points = alexnet.alexnet_v2(data, num_classes=num_labels, is_training=is_training)
                else:
                    outputs, end_points = alexnet.alexnet_v2(data, num_classes=num_labels, is_training=is_training)
        return outputs

logits = model(tf_train_dataset)
#calculate loss
with tf.name_scope('loss'):
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=tf_train_labels, logits=logits))
#optimization Step
optimizer = tf.train.AdamOptimizer(1e-4).minimize(loss)

#predictions for each dataset
train_predictions = tf.nn.softmax(logits)
valid_predictions = tf.nn.softmax(model(tf_validation_dataset,is_training=False,reusevar=True))

num_steps = 1001

with tf.Session(graph=graph) as session:
  tf.global_variables_initializer().run()
  print('Initialized')


  for step in range(num_steps):
    offset = (step * batchsize) % (train_data_labels.shape[0] - batchsize)
    batch_data = train_data[offset:(offset + batchsize), :, :, :]
    batch_labels = train_data_labels[offset:(offset + batchsize), :]
    feed_dict = {tf_train_dataset : batch_data, tf_train_labels : batch_labels}
    _, l, predictions = session.run(
      [optimizer, loss, train_predictions], feed_dict=feed_dict)

    if (step % 2 == 0):
      print('Minibatch loss at step %d: %f' % (step, l))
      print('Minibatch accuracy: %.1f%%' % accuracy(predictions, batch_labels))
      print('Validation accuracy: %.1f%%' % accuracy(
        valid_predictions.eval(), valid_data_labels))

Я не могу понять, заключается ли проблема в предварительной обработке или обучении.Другая проблема, с которой я работаю, заключается в том, что, когда данные в формате jpg составляют 364 Мб, когда я загружаю все изображения в программу.Числовые массивы занимают около 13 ГБ оперативной памяти, которая содержит данные изображения и соответствующие им векторы меток.Это нормально или я совершаю ошибку?Сейчас я использую около 2000 изображений для обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...