Я пытаюсь решить задачу идентификации породы собак на 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 изображений для обучения.