【问题标题】:Enforcing symmetry in Keras在 Keras 中强制对称
【发布时间】:2019-07-04 15:28:50
【问题描述】:

我正在寻找一种在 Keras 中为函数创建神经网络模型的方法,该模型在输入交换方面是对称的。为简单起见,我们假设感兴趣的函数取决于两个变量 x,y 并返回一个标量 f=f(x,y)。此外,我们知道f(x,y)=f(y,x) 适用于任何x,y。为了确保我的 Keras 神经网络模型完全再现这种对称性,选择什么方法?

显然,我可以使用对称数据训练模型,但我正在寻找一种将这种对称性“硬编码”到模型中的方法。

我知道,这个问题似乎很基础。抱歉,如果我忽略了这个问题的明显答案,请提前感谢您的帮助!

【问题讨论】:

    标签: machine-learning keras neural-network symmetry


    【解决方案1】:

    从您的问题来看,您正在寻找的似乎是一种方便的方法,可以将具有共享权重的层或一组层以正向和反向顺序应用于输入。

    即类似于卷积如何通过一组时间步来识别模式,但考虑到输入缓冲区是循环的。

    实现此目的的一种便捷方法是将您的特殊“卷积”层放入可重复使用的辅助模型中,然后将结果最大化。类似于以下内容:

    from tensorflow import keras
    from tensorflow.keras.layers import *
    from tensorflow.keras.models import Model
    from tensorflow.keras import backend as K
    
    def make_inner_model():
      inp = Input(shape=(2,))
      h1 = Dense(8, activation='relu')(inp)
      out = Dense(1)(h1)
      model = Model(inp, out)
      return model
    
    def make_model(inner_model):
      inp = Input(shape=(2,))
      rev = Lambda(lambda x: K.concatenate([x[:, 1:], x[:, 0:1]], axis=1))(inp)
      r1 = inner_model(inp)
      r2 = inner_model(rev)
      out = Maximum()([r1, r2])
      model = Model(inp, out)
      model.compile('adam', 'mse')
      return model
    
    inner = make_inner_model()
    model = make_model(inner)
    model.summary()
    

    【讨论】:

    • 你有关于这个主题的链接或论文吗?
    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2021-06-04
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多