Почему модель работает плохо после нормализации? - PullRequest
0 голосов
/ 12 ноября 2018

Я использую полностью подключенную нейронную сеть, и я использую нормализованные данные так, чтобы значения каждой отдельной выборки варьировались от 0 до 1. Я использовал 100 нейронов в первом слое и 10 во втором слое и использовал почти 50 проб отсчетов во время обучения , Я хочу классифицировать мои данные на два класса. Но производительность моей сети слишком низкая, почти 49 процентов по данным обучения и тестирования. Я попытался увеличить производительность, изменив значения гиперпараметров. Но это не сработало. Может кто-нибудь сказать мне, что я должен сделать, чтобы получить более высокую производительность?

x = tf.placeholder(tf.float32, [None, nPixels])
W1 = tf.Variable(tf.random_normal([nPixels, nNodes1], stddev=0.01))
b1 = tf.Variable(tf.zeros([nNodes1]))
y1 = tf.nn.relu(tf.matmul(x, W1) + b1)

W2 = tf.Variable(tf.random_normal([nNodes1, nNodes2], stddev=0.01))
b2 = tf.Variable(tf.zeros([nNodes2]))
y2 = tf.nn.relu(tf.matmul(y1, W2) + b2)

W3 = tf.Variable(tf.random_normal([nNodes2, nLabels], stddev=0.01))
b3 = tf.Variable(tf.zeros([nLabels]))
y = tf.nn.softmax(tf.matmul(y2, W3) + b3)

y_ = tf.placeholder(dtype=tf.float32, shape=[None, 2])

cross_entropy = -1*tf.reduce_sum(y_* tf.log(y), axis=1)    
loss = tf.reduce_mean(cross_entropy)

optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
correct_prediction = tf.equal(tf.argmax(y_,axis=1), tf.argmax(y, axis=1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

1 Ответ

0 голосов
/ 12 ноября 2018

Ваша вычислительная модель ничего не знает об «изображениях», она видит только цифры. Поэтому, если вы обучили его пикселям со значениями от 0 до 255, он узнал, что означает «светлый», что означает «темный» и как они объединяются, чтобы дать вам любое целевое значение, которое вы пытаетесь смоделировать.

И то, что вы сделали при нормализации, это то, что вы заставили все пиксели быть 0-1. Так что, насколько заботится модель, они все черные как ночь. Не удивительно, что он не может извлечь ничего значимого.

Вам необходимо применять одну и ту же нормализацию ввода во время обучения и тестирования.

А если говорить о нормализации для моделей NN, то лучше нормализовать до нулевого среднего.

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