【发布时间】:2018-03-28 06:18:31
【问题描述】:
我的神经网络有一个自定义层,它接受输入向量x,生成正态分布张量A,并返回A(用于后续层)和乘积Ax。假设我想在自定义层的输出处重用存储在 A 中的值,在第二个不同的层中,在确定哪个 Keras 后端函数(K.backend.random_normal 或 K.backend.random_normal_variable ) 我应该使用它来生成A?
a) 后端函数random_normal 在每次调用后返回一个存储不同值的张量(参见下面的代码 sn-p)。对我来说,这表明random_normal 充当正态分布值的生成器。这是否意味着如果想在调用后保持其值,则不应使用random_normal 生成正态分布的张量?
b) 后端函数random_normal_variable 看起来更安全(参见下面的代码 sn-p),因为它在调用之间保留值。
我的概念理解正确吗?还是我错过了一些基本的东西? 我正在使用 Keras 2.1.2 和 Tensorflow 1.4.0。
用random_normal 进行实验(值随调用而变化):
In [5]: A = K.random_normal(shape = (2,2), mean=0.0, stddev=0.5)
In [6]: K.get_value(A)
Out[6]: array([[ 0.4459489 , -0.82019573],
[-0.39853573, -0.33919844]], dtype=float32)
In [7]: K.get_value(A)
Out[7]: array([[-0.37467018, 0.42445764],
[-0.573843 , -0.3468301 ]], dtype=float32)
用random_normal_variable 进行实验(值在调用期间保持不变):
In [9]: B = K.random_normal_variable(shape=(2,2), mean=0., scale=0.5)
In [10]: K.get_value(B)
Out[10]: array([[ 0.07700552, 0.28008622],
[-0.69484973, -1.32078779]], dtype=float32)
In [11]: K.get_value(B)
Out[11]: array([[ 0.07700552, 0.28008622],
[-0.69484973, -1.32078779]], dtype=float32)
【问题讨论】:
标签: tensorflow keras keras-layer