Первые два из них являются обучаемыми, а последние два - нет. Таким образом, уровень пакетной нормализации, вероятно, является причиной того, что ваша пользовательская сеть имеет необучаемые параметры.

е ли вы уточнить для меня и людей, которые должны понять определениенеобучаемые параметры в модели?

Например, когда вы строите свою собственную модель, ее значение по умолчанию равно 0, но когда вы хотите использовать начальную модель, она становится чем-то другим, а не 0. Что было бы причиной этого?

Большое спасибо за ваши разъяснения заранее.

Ответы на вопрос(4)

Решение Вопроса

тся рассмотрение случая любой конкретной модели NN и ее архитектуры.

Скажем, мы уже настроили определение вашей сети в Keras, и ваша архитектура выглядит как256->500->500->1, Основываясь на этом определении, мы, похоже, имеем модель регрессии (один выход) с двумя скрытыми слоями (500 узлов каждый) и входом 256.

Одним из необучаемых параметров вашей модели является, например,само количество скрытых слоев (2). Другое может бытьузлы на каждом скрытом слое (500 в данном случае) или даже узлы на каждом отдельном слое, давая вам один параметр на слой плюс количество самих слоев.

Эти параметры "не обучаемы", потому чтоВы не можете оптимизировать его ценность с вашими данными обучения. Обучающие алгоритмы (такие как обратное распространение) будут оптимизировать и обновлятьвеса вашей сети, которые являются фактическими обучаемыми параметрами здесь (обычно несколько тысяч, в зависимости от ваших подключений). Ваши тренировочные данные не могут помочь вам определить эти необучаемые параметры.

Тем не мение, это не значит чтоnumberHiddenLayers не тренируется вообще, это только означает, что вэта модель и его реализация нам не по силам.Мы могли бы сделатьnumberHiddenLayers обучаемый; самый простой способ будет определитьдругой алгоритм ML который принимает эту модель в качестве входных данных и обучает ее с несколькими значениямиnumberHiddenLayers, Наилучшее значение получается с моделью, которая превосходит другие, таким образом оптимизируяnumberHiddenLayers переменная.

Другими словами, необучаемые параметры модели - это те, которые вы не будете обновлять и оптимизировать во время обучения, и которые должны быть определеныаприориили переданы в качестве входных данных.

В Керасе необучаемые параметры - это те, которыене тренируются с использованием градиентного спуска, Это также контролируетсяtrainable параметр в каждом слое, например:

from keras.layers import *
from keras.models import *
model = Sequential()
model.add(Dense(10, trainable=False, input_shape=(100,)))
model.summary()

Это печатает ноль обучаемых параметров и 1010 необучаемых параметров.

_________________________________________________________________    
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,010
Trainable params: 0
Non-trainable params: 1,010
_________________________________________________________________

Теперь, если вы установите слой как обучаемый сmodel.layers[0].trainable = True тогда это печатает:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,010
Trainable params: 1,010
Non-trainable params: 0
_________________________________________________________________

Теперь все параметры являются обучаемыми и нет нулевых необучаемых параметров. Но есть также слои, которые имеют как обучаемые, так и не обучаемые параметры, одним примером являетсяBatchNormalization слой, где хранится среднее значение и стандартное отклонение активаций для использования во время тестирования. Один пример:

model.add(BatchNormalization())
model.summary()

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
_________________________________________________________________
batch_normalization_1 (Batch (None, 10)                40        
=================================================================
Total params: 1,050
Trainable params: 1,030
Non-trainable params: 20
_________________________________________________________________

Этот конкретный случай BatchNormalization имеет в общей сложности 40 параметров, 20 обучаемых и 20 необучаемых. 20 необучаемых параметров соответствуют вычисленному среднему значению и стандартному отклонению активаций, которые используются во время теста, и эти параметры никогда не будут обучаться с использованием градиентного спуска и не будут затронутыtrainable флаг.

 apatsekin07 дек. 2018 г., 01:19
Это действительно правильный ответ на этот вопрос, так как автор спрашивает, почему некоторые параметры в начальной модели всегда «не обучаемы», даже если вы устанавливаете все слои в обучаемые. Ответ - среднее / дисперсионные параметры для слоев батчнорм.

без обучаемого параметры (как показано вmodel.summary()) означаетколичество весов которые не обновляются во время тренировок с обратным распространением.

Есть в основном два типа не обучаемых гирь:

Те, которые вы выбрали, чтобы сохранить постоянными при обучении. Это означает, что керасы вообще не будут обновлять эти веса во время тренировок.Те, которые работают как статистика в слоях BatchNormalization. Они обновлены со средним и дисперсией, но они не "обучены обратному распространению".

Веса - это значения внутри сети, которые выполняют операции и могут быть скорректированы в соответствии с тем, что мы хотим. Алгоритм обратного распространения изменяет веса в сторону меньшей ошибки в конце.

По умолчанию все веса в модели керас являются обучаемыми.

Когда вы создаете слои, он создает свои собственные веса, и они пригодны для обучения. (Алгоритм обратного распространения обновит эти веса)

Когда вы сделаете их неисследуемыми, алгоритм больше не будет обновлять эти веса. Это полезно, например, когда вы хотите сверточный слой с определенным фильтром, например, фильтром Собеля. Вы не хотите, чтобы обучение изменило эту операцию, поэтому эти веса / фильтры должны быть постоянными.

Существует множество других причин, по которым вы можете захотеть сделать гири неиссякаемыми.

Изменение параметров:

Для того, чтобы решить, являются ли веса пригодными для обучения или нет, вы берете слои из модели и устанавливаетеtrainable:

model.get_layer(layerName).trainable = False #or True

Это должно быть сделано до компиляции.

 WiLL_K18 сент. 2018 г., 15:27
Прежде всего, спасибо, но что если производительность повышается при использовании моделей с предварительной подготовкой?
 Daniel Möller18 сент. 2018 г., 15:24
Например, у вас может быть «предварительно обученная модель», которая, как вы знаете, работает хорошо, и вы не хотите ее менять. Вы можете тренировать GAN и работать только с одной стороной одновременно. Есть действительно много творческих причин, в зависимости от того, что вы хотите.
 WiLL_K18 сент. 2018 г., 12:57
«Существует множество других причин, по которым вы можете захотеть сделать гири неиссякаемыми». Что это, если вы хотите объяснить, пожалуйста?

что если вы заморозите любой слой сети. все параметры в этом замороженном слое становятся необучаемыми. С другой стороны, если вы разрабатываете свою сеть с нуля, она может иметь и некоторые необучаемые параметры. Например, слой пакетной нормализации имеет 4 параметра, которые являются;

[gamma weights, beta weights, moving_mean, moving_variance]

Первые два из них являются обучаемыми, а последние два - нет. Таким образом, уровень пакетной нормализации, вероятно, является причиной того, что ваша пользовательская сеть имеет необучаемые параметры.

Ваш ответ на вопрос