繁体   English   中英

如何在自定义层中编写initializer(random.uniform)?

[英]how to code initializer(random.uniform) in custom layers?

我想用随机制服初始化我的自定义图层。 在TensorFlow中,我可以找到以下使用initializer='uniform'代码。 但是我想在(-1.0,1.0)之间设置随机统一输出范围。 怎么做:

class MyDenseLayer(tf.keras.layers.Layer):
  def __init__(self, num_outputs):
    super(MyDenseLayer, self).__init__()
    self.num_outputs = num_outputs

  def build(self, input_shape):
    self.kernel = self.add_variable(initializer='uniform',shape=[int(input_shape[-1]),self.num_outputs])

  def call(self, input):
    return tf.matmul(input, self.kernel)

一种方法是在numpy生成随机制服,然后使用tf.constant_initializer()如下所示:

import tensorflow as tf
import numpy as np

class MyDenseLayer(tf.keras.layers.Layer):
    def __init__(self, num_outputs):
        super(MyDenseLayer, self).__init__()
        self.num_outputs = num_outputs

    def build(self, input_shape):
        shape = [int(input_shape[-1]),self.num_outputs]
        init_val = np.random.uniform(low=-1.0, high=1.0, size=shape)
        initializer = tf.constant_initializer(init_val,
                                              dtype=tf.float32)
        self.kernel = self.add_weight(initializer=initializer,
                                      shape=shape,
                                      name='kernel')
        super(MyDenseLayer, self).build(input_shape)

    def call(self, input):
        return tf.matmul(input, self.kernel)

改用tf.initializers.random_uniform()

init = tf.initializers.random_uniform(minval=-1.0, maxval=1.0)
self.kernel = self.add_weight(initializer=init,
                              shape=shape,
                              name='kernel')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM