Я работаю над нейронной сетью в Tensorflow. Макет модели - 73x100x100x100x2, что означает, что у меня 73 входных объекта, 3 скрытых слоя по 100 нейронов каждый и два выходных класса. Я использую классификатор softmax, чтобы получить результат. Используемые гиперпараметры: learning_rate = 0,001, num_epochs = 501, minibatch_size = 64, L2_beta = 0,01
Когда я тренирую свою модель без регуляризации, я получаю
Train Accuracy: 0.7155
Test Accuracy: 0.5936
при регуляризации я получаю
Train Accuracy: 0.6553
Test Accuracy: 0.6195
При обучении без регуляризации python использует около 300 МБ ОЗУ. С регуляризацией использование памяти python постоянно растет. Он использует до 12 ГБ оперативной памяти в 500-ю эпоху моего обучения. Поскольку я не мог найти проблемы с памятью при регуляризации, я думаю, что в моем коде есть ошибка.
def compute_cost(ZX, Y, L2_beta, parameters, batchsize):
logits = tf.transpose(ZX)
labels = tf.transpose(Y)
unreg_cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels = labels))
regularizers = tf.nn.l2_loss(parameters['W1']) + tf.nn.l2_loss(parameters['W2']) +tf.nn.l2_loss(parameters['W3']) + tf.nn.l2_loss(parameters['W4'])
cost = tf.add(unreg_cost, L2_beta*(1/batchsize)*regularizers)
return cost
Я вызываю свою функцию стоимости следующим образом:
cost = compute_cost(ZX,Y,L2_beta,parameters,minibatch_size)
My WПараметры инициализируются следующим образом:
W1 = tf.get_variable("W1", [100,73], initializer = tf.contrib.layers.xavier_initializer())
W2 = tf.get_variable("W2", [100,100], initializer = tf.contrib.layers.xavier_initializer())
W3 = tf.get_variable("W3", [100,100], initializer = tf.contrib.layers.xavier_initializer())
W4 = tf.get_variable("W4", [2,100], initializer = tf.contrib.layers.xavier_initializer())
parameters = {"W1": W1,
"W2": W2,
"W3": W3,
"W4": W4
}
Как правильно реализовать регуляризацию L2 по отношению к размеру мини-партии?
Большое спасибо