nav*_*rri 7 python python-3.x deep-learning tensorflow
我正在尝试将自定义初始化程序设置为使用我已经拥有的权重矩阵初始化的tf.layers.dense
位置kernel_initializer
.
u_1 = tf.placeholder(tf.float32, [784, 784])
first_layer_u = tf.layers.dense(X_, n_params, activation=None,
kernel_initializer=u_1,
bias_initializer=tf.keras.initializers.he_normal())
Run Code Online (Sandbox Code Playgroud)
这是错误的说法 ValueError: If initializer is a constant, do not specify shape.
分配占位符是否是一个问题,kernel_initializer
或者我错过了什么?
至少有两种方法可以实现这一目标:
1创建自己的图层
W1 = tf.Variable(YOUR_WEIGHT_MATRIX, name='Weights')
b1 = tf.Variable(tf.zeros([YOUR_LAYER_SIZE]), name='Biases') #or pass your own
h1 = tf.add(tf.matmul(X, W1), b1)
Run Code Online (Sandbox Code Playgroud)
2使用 tf.constant_initializer
init = tf.constant_initializer(YOUR_WEIGHT_MATRIX)
l1 = tf.layers.dense(X, o, kernel_initializer=init)
Run Code Online (Sandbox Code Playgroud)
我认为你可以定义自己的初始化函数.该函数需要3个参数:shape
,dtype
,和partition_info
.它应该返回一个tf.Tensor
用于初始化重量的东西.既然你有一个numpy
数组,我想你可以tf.constant
用来创建这个张量.例如:
def custom_initializer(shape_list, dtype, partition_info):
# Use np.ones((7, 3)) as an example
return tf.constant(np.ones((7, 3)))
Run Code Online (Sandbox Code Playgroud)
然后你可以把它传递给kernel_initializer
.如果尺寸都匹配,它应该工作.我把上的示例要旨使用Estimator
来构造模型并使用LoggingTensorHook
记录dense/kernel
在每一个步骤.您应该能够看到重量正确启动.
我刚发现使用tf.constant_initializer
会更好.它用于tensorflow指南.你可以做到kernel_initializer=tf.constant_initializer(np.ones((7, 3)))
.
归档时间: |
|
查看次数: |
9140 次 |
最近记录: |