如何从神经网络获取权重并确保权重仍可训练?

时间:2019-01-06 01:57:34

标签: python-3.x tensorflow neural-network

我正在尝试训练一个由误差和正则化组成的目标函数的神经网络。

为了进行正则化,我想获得所有权重作为一维张量(称此张量weights),执行一些操作,并将其添加到目标函数中。如何获得重量,以便继续训练?

到目前为止,我已经尝试过:

  1. 使用tf.get_default_graph()。get_tensor_by_name()-当我针对weights计算梯度时,错误项“梯度”始终为None
  2. 使用tf.get_variable()-如上所述,错误项梯度始终为None
  3. 使用图层的trainable_weights属性-trainable_weights属性返回一个空列表。

我希望运行的正则化是一个高斯混合模型,并且GMM参数本身也得到了训练。

例如,对于第三次尝试,我的代码是:

# Here I create the layers
layers = []
for L in range(len(units)):
    layer = tf.layers.Dense(units=units[L], activation=tf.nn.relu, name="lay"+str(L))
    layers.append(layer)       
layers.append(tf.layers.Dense(n_y, activation=None))

# Here I try to get the weights
weights = [L.trainable_weights for L in layers] # Returns empty lists
weights = tf.concat(weights,axis=0)

1 个答案:

答案 0 :(得分:0)

对于您而言,我强烈建议您使用最基本的操作(如

)定义权重和图层
weights = {
'h1': tf.Variable(tf.random_normal([num_input, n_hidden_1])),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_hidden_2, num_classes]))}

biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1])),
'b2': tf.Variable(tf.random_normal([n_hidden_2])),
'out': tf.Variable(tf.random_normal([num_classes]))}

代替tf.layers.Dense()之类的高级API。这里有一个非常简单的example

然后可以通过以下方式获取weights的值

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    weights_value = sess.run(weights['h1'])
    print(weights_value)

希望它有用。