Как установить параметры по умолчанию Conv2D в tf.keras? - PullRequest
0 голосов
/ 27 марта 2019

Поддержка У меня есть сеть с 5 свертками.Я пишу это Керасом.

x = Input(shape=(None, None, 3))
y = Conv2D(10, 3, strides=1)(x)
y = Conv2D(16, 3, strides=1)(y)
y = Conv2D(32, 3, strides=1)(y)
y = Conv2D(48, 3, strides=1)(y)
y = Conv2D(64, 3, strides=1)(y)

Я хочу установить для всех сверток kernel_initializer значение xavier.Один из методов:

x = Input(shape=(None, None, 3))
y = Conv2D(10, 3, strides=1, kernel_initializer=tf.glorot_uniform_initializer())(x)
y = Conv2D(16, 3, strides=1, kernel_initializer=tf.glorot_uniform_initializer())(y)
y = Conv2D(32, 3, strides=1, kernel_initializer=tf.glorot_uniform_initializer())(y)
y = Conv2D(48, 3, strides=1, kernel_initializer=tf.glorot_uniform_initializer())(y)
y = Conv2D(64, 3, strides=1, kernel_initializer=tf.glorot_uniform_initializer())(y)

Но этот вид написания очень печален, а код очень избыточен.

Есть ли лучший способ написания?

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

Keras не предоставляет возможности изменить значения по умолчанию, поэтому вы можете просто сделать функцию-обертку:

def myConv2D(filters, kernel):
    return Conv2D(filters, kernel, strides=1, kernel_initializer=tf.glorot_uniform_initializer())

А затем используйте его как:

x = Input(shape=(None, None, 3))
y = myConv2D(10, 3)(x)
y = myConv2D(16, 3)(y)
y = myConv2D(32, 3)(y)
y = myConv2D(48, 3)(y)
y = myConv2D(64, 3)(y)
1 голос
/ 27 марта 2019

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

Я думаю, что лямбда в этой ситуации больше подходит, чем функция.

Вы можете сделать это так,

customConv = lambda filters, kernel : Conv2D(filters, kernel, strides=1, kernel_initializer=tf.glorot_uniform_initializer())

x = Input(shape=(None, None, 3))

y = customConv(10, 3)(x)
y = customConv(16, 3)(y)
y = customConv(32, 3)(y)
y = customConv(48, 3)(y)
y = customConv(64, 3)(y)
...