Tensorflow или общая нейронная сеть: одна из моих потерь слишком высока! (потеря = u v)

#tensorflow #machine-learning #deep-learning #neural-network

#тензорный поток #машинное обучение #глубокое обучение #нейронная сеть

Вопрос:

Я создал свое пользовательское значение потерь, которое равно u v, а u — MSE между значением прогноза из моей нейронной сети и значением выходного сигнала обучения. v — это значение, полученное из уравнения, связанного с градиентом значения прогноза относительно входного значения.

Проблема в зависимости от ввода, v дает огромное число по сравнению с u .

Как я могу сделать амплитуду v похожей на u?


Мой ввод не нормализован. Вместо этого я помещаю слои нормализации, чтобы в конечном итоге они нормализовались. Причина, по которой я вставляю слой нормализации, и v выдает огромное количество, заключается в градиенте значения прогноза относительно входных данных, которое не нормализовано, и мне это нужно. Если я введу «хорошее» значение в качестве входных данных, например 0 ~ 1. Мой NN работает нормально. Однако, когда я вставляю «реальное» (связанное с физикой) значение, оно не работает из-за огромного значения v. и это значение v не будет уменьшаться до тех пор, пока сеть не будет хорошо обучена для u. Я также попытался установить потери только в отношении ‘u’, а затем позже включить ‘v’. Однако из-за высокого значения ‘v’ система не работает.

Ответ №1:

Вы все равно должны нормализовать свой ввод, несмотря на наличие слоев нормализации.

Если одна из ваших потерь (точнее, градиент потерь по параметрам) слишком велика, вы можете просто масштабировать ее, скажем, на константу. loss = loss/100 Математика работает просто отлично, чтобы масштабировать градиент 1/100 .

Комментарии:

1. Спасибо за ответ. Мне интересно, почему мне все еще нужно нормализовать мои входные данные, хотя есть уровень нормализации? Входные данные передаются на скрытые слои через уровень нормализации.

2. Уровень нормализации @ENHorse обычно нормализуется для каждого пакета, в то время как нормализация данных выполняется для каждого набора данных. Вы имеете в виду ввод -> нормализацию -> линейный? Я не думаю, что когда-либо видел это, но ввод -> линейный -> нормализация гораздо чаще.