小编Mr *_*les的帖子

Keras、Tensorflow:评估时如何在自定义层中设置断点(调试)?

我只想在自定义图层内进行一些数字验证。

假设我们有一个非常简单的自定义层:

class test_layer(keras.layers.Layer):
    def __init__(self, **kwargs):
        super(test_layer, self).__init__(**kwargs)

    def build(self, input_shape):
        self.w = K.variable(1.)
        self._trainable_weights.append(self.w)
        super(test_layer, self).build(input_shape)

    def call(self, x, **kwargs):
        m = x * x            # Set break point here
        n = self.w * K.sqrt(x)
        return m + n
Run Code Online (Sandbox Code Playgroud)

和主程序:

import tensorflow as tf
import keras
import keras.backend as K

input = keras.layers.Input((100,1))
y = test_layer()(input)

model = keras.Model(input,y)
model.predict(np.ones((100,1)))
Run Code Online (Sandbox Code Playgroud)

如果我在该行设置断点调试m = x * x,程序在执行时会在此处暂停y = test_layer()(input),这是因为图形已构建,call()方法被调用。

但是当我model.predict()用来赋予它真正的价值,并且想看看它是否正常工作时,它不会在该行停顿m = …

python pycharm keras tensorflow

11
推荐指数
2
解决办法
2411
查看次数

Tensorflow,Keras:如何创建仅在特定位置更新的可训练变量?

例如, y=Ax

其中A对角矩阵,其可训练的权重(w1, w2, w3)位于对角线上。

A = [w1 ... ...
    ...  w2 ...
    ... ... w3]
Run Code Online (Sandbox Code Playgroud)

如何A在Tensorflow或Keras中创建这样的可训练的?

如果我尝试A = tf.Variable(np.eye(3)),可训练权重的总数将是3 * 3 = 9,而不是3。因为我只是想更新(W1,W2,W3)是3层的权重。

可能要使用一个技巧A = tf.Variable([1, 1, 1]) * np.eye(3),以便将3个可训练的权重映射到的对角线A

我的问题是:

  1. 这个技巧对我有用吗?可以正确计算梯度吗?

  2. 如果情况A更加复杂怎么办?例如,如果我想创建:

更复杂的例子

哪里w1, w2, ..., w6是要更新的权重。

python gradient-descent keras tensorflow tensor

6
推荐指数
1
解决办法
452
查看次数

标签 统计

keras ×2

python ×2

tensorflow ×2

gradient-descent ×1

pycharm ×1

tensor ×1