为了账号安全,请及时绑定邮箱和手机立即绑定

如何在tf.keras中设置Conv2D的默认参数?

如何在tf.keras中设置Conv2D的默认参数?

幕布斯7119047 2021-12-17 16:42:56
支持我有一个具有 5 个卷积的网络。我是用 Keras 写的。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 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

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)


查看完整回答
反对 回复 2021-12-17
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

更好地 make alambda将创建一个Conv2D层并根据需要修复初始化程序并在模型定义部分调用它。


我认为 lambda 比函数更适合这种情况。


你可以这样做,


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)


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信