将`K.constant`或`self.add_weight(trainable = False)`用于图层中的固定权重是否有所不同 - python

我有一个使用固定权重矩阵的自定义keras层。我想知道如何使用带有tensorflow的keras API处理这个固定权重矩阵。特别是当K.constant提供更大的灵活性时,为什么还要使用self.add_weights(trainable=False)(例如,我可以将Layer.set_weights与后一种一起使用)。

具体来说,在构建方法中,我可以执行以下操作:

 class CustomLayer(Layer):
        ...

        def build(self, input_shape):
               self.fixed_tensor = K.constant(self.my_fixed_tensor)
               self.built = True

要么

 class CustomLayer(Layer):
        ...

        def build(self, input_shape):
               self.fixed_tensor = self.add_weight(
                    shape=self.my_fixed_tensor.shape,
                    initializer=lambda shape, dtype: self.my_fixed_tensor,
                    trainable=False
               )
               self.built = True

两种解决方案都有效,我想知道它们在后端的处理方式是否不同。

参考方案

K.constant只是与tf.constant类似的Keras,它只是创建一个常数值张量。它是一个较低层的构造,就像您说的那样,它仅对永远不变的值有用。在大多数情况下,不必显式调用此函数,因为执行2 * my_tensor这样的操作会将2转换为常量
自动为您提供正确类型的张量。但是,在某些情况下,您可能更喜欢显式调用它,例如,如果您有一个常量数组,并且只希望一个张量表示它们(而不是将它们反复转换为新的常量张量)。

add_weight是用于图层的方法,它会创建一个TensorFlow变量,表示该图层中的某些可变值。权重是一个高级概念,与分层模型有关。如您所指出的,可以动态更改权重(可训练与否)。

从理论上讲,您可能在模型中绝对没有常量,而将所有常量替换为权重。但是,它通常不太实用,因为至少需要在1.x中初始化变量,不能像常量一样优化变量的使用,而且如果您从不更改变量,则开销不会给您带来任何好处。

如何在PyQt4的动态复选框列表中检查stateChanged - python

所以我要从PyQt4的列表中添加复选框。但是我找不到在Window类中对每个状态使用stateChanged的方法。这是从列表元素添加它们的功能: def addCheckbox(self): colunas = Graphic(self.caminho).getColunas() for col in colunas: c = QtGui.QCheckBo…

管理多个会话和图形的合理方法 - python

我想在多个会话中管理多个Keras模型。构建我的应用程序后,除了创建,保存和加载模型外,还可以同时运行它们。处理这种情况的正确方法是什么?当前,一个模型由包装类的实例表示。它用于训练,保存,加载和预测。每个实例创建一个tf.Graph和tf.Session,它们在需要实际模型的每个函数中使用。class NN: def __init__(self): sel…

Python:按顺序执行步骤 - python

我试图制作一个完全可切片的斐波那契数列,但我一直陷于切片的阶跃特征。这是我到目前为止的代码:class Fib: def __init__(self, start, end): self.start = start self.end = end def _fib(self, index): items = [0,1] n = 2 while n <= …

如果一个或两个文件不存在,如何处理该异常? - python

我正在尝试检查是否存在一个或两个文件,如下所示:def check_files_if_exist(): try: f1 = open(file1) f1.close() f2 = open(file2) f2.close() except: #how to pass exception if one or two files does not exist? …

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…