首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow是否提供了半标准的初始化器?

TensorFlow是否提供了半标准的初始化器?
EN

Stack Overflow用户
提问于 2020-04-21 06:44:16
回答 1查看 46关注 0票数 0

TensorFlow提供random_normal_initializer。但是,我需要一个初始化器来产生介于0N之间的数字,但这会在范围[0, N] (其中N可以是1)内的某个值x (由用户选择)周围设置更多的密度,因此我不能使用统一初始化器(因为它将质量等同地赋予所有值)。

我认为一个产生HalfNormal的初始化器是可以的。

TF是否已经提供了这个功能,或者我是否需要实现一个自定义的初始化器?

如果我需要实现一个自定义初始化器,典型的方法是什么?我想我可以从initializer class继承,但我不知道这是否是一种常见的做法。

这个问题也是raised in the TF's issue tracker造成的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 11:52:28

根据this documentation page的说法,我们可以通过定义一个返回初始值的函数来实现一个自定义的初始化器。然后,我们将这个函数对象(即不调用该函数)传递给初始化器。

下面是一个示例(在TensorFlow 2.1中),它实现了我想要的功能。

代码语言:javascript
复制
import tensorflow as tf


def random_half_normal(shape, **kwargs):
    return tf.abs(tf.keras.backend.random_normal(shape, **kwargs))


class MyLayer(tf.keras.layers.Layer):
    def build(self, input_shape):
        self.my_var = self.add_weight(initializer=random_half_normal, 
                                      trainable=False)

    def call(self, inputs):
        tf.print("\nself.my_var =", self.my_var)
        return inputs


def get_model():
    inp = tf.keras.layers.Input(shape=(1,))
    out = MyLayer(8)(inp)
    model = tf.keras.Model(inputs=inp, outputs=out)
    model.summary()
    return model


def train():
    model = get_model()
    model.compile(optimizer="adam", loss="mae")
    x_train = [2, 3, 4, 1, 2, 6]
    y_train = [1, 0, 1, 0, 1, 1]
    model.fit(x_train, y_train)


if __name__ == '__main__':
    train()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61333274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档