machine-learning - 在 Keras 中强制对称

标签 machine-learning keras neural-network symmetry

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

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

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

最佳答案

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

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

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

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()

关于machine-learning - 在 Keras 中强制对称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56877217/

相关文章:

python - 如何将 keras(h5) 文件转换为 tflite 文件?

python - 如何在 python 中的 OpenCv 中添加自定义 Keras 模型

deep-learning - 训练损失根本没有改变(PyTorch)

python - Keras CNN LSTM(TF 后端)的显着图

machine-learning - 如何使用 pymc3 重新训练我的逻辑模型?

opencv - 使用带有交通标志的 OpenCV 级联分类器

python - 在 keras 上使用 multiple_gpu_model - 导致资源耗尽

machine-learning - Keras 中的交叉验证

machine-learning - 使用 libSVM 实现 SVM 中的数据不平衡

arrays - Tensorflow 中张量和多维矩阵有什么区别?