我正在尝试训练一个由误差和正则化组成的目标函数的神经网络。
为了进行正则化,我想获得所有权重作为一维张量(称此张量weights
),执行一些操作,并将其添加到目标函数中。如何获得重量,以便继续训练?
到目前为止,我已经尝试过:
weights
计算梯度时,错误项“梯度”始终为None
。None
我希望运行的正则化是一个高斯混合模型,并且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)
答案 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)
希望它有用。