Устанавливает ли установка seed в tf.random.set_seed также установить seed, используемый glorot_uniform kernel_initializer при использовании слоя conv2D в кератах? - PullRequest
4 голосов
/ 22 апреля 2020

В настоящее время я тренирую convolutional neural network, используя conv2D layer, определенный следующим образом:

conv1 = tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), padding='SAME', activation='relu')(inputs)

Насколько я понимаю, по умолчанию для kernel_initializer установлено значение glorot_uniform, в котором по умолчанию используется начальное значение none. :

tf.keras.layers.Conv2D(
        filters, kernel_size, strides=(1, 1), padding='valid', data_format=None,
        dilation_rate=(1, 1), activation=None, use_bias=True,
        kernel_initializer='glorot_uniform', bias_initializer='zeros',
        kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,
        kernel_constraint=None, bias_constraint=None, **kwargs
    )



tf.compat.v1.keras.initializers.glorot_uniform(seed=None, dtype=tf.dtypes.float32)

Я пытаюсь создать воспроизводимый код и уже установил случайные начальные числа согласно этому сообщению StackOverflow :

seed_num = 1

os.environ['PYTHONHASHSEED'] = '0'
np.random.seed(seed_num)
rn.seed(seed_num)

session_conf = tf.compat.v1.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)

tf.random.set_seed(seed_num)

sess = tf.compat.v1.Session(graph=tf.compat.v1.get_default_graph(), config=session_conf)
K.set_session(sess)

Это tf.random.set_seed номер семени, используемый glorot_uniform в пределах conv2D layer? Если нет, как это семя будет определено при определении conv2D layer?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Благодаря Забир Аль-Нацист , ответ «да». Настройка tf.random.set_seed() также устанавливает glorot_uniform seed для слоя Conv2D.

0 голосов
/ 22 апреля 2020

Для каждого слоя вы можете использовать начальное число для инициализаторов ядра и смещения.

Вы можете заполнить ваш инициализатор отдельно,

kernel_initializer=initializers.glorot_uniform(seed=0))

Из документации:

glorot_normal

keras.initializers.glorot_normal(seed=None)

Glorot normal initializer, also called Xavier normal initializer.

It draws samples from a truncated normal distribution centered on 0 with stddev = sqrt(2 / (fan_in + fan_out)) where fan_in is the number of input units in the weight tensor and fan_out is the number of output units in the weight tensor.

Arguments

    seed: A Python integer. Used to seed the random generator.

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