如何使用张量流神经网络建模对称函数以进行回归

时间:2019-06-11 09:14:55

标签: tensorflow neural-network

我正在尝试为对称输入建立回归模型,希望使用f(x,y)= f(y,x)= F建模函数。突然,我发现训练有素的神经网络将为f(x,y)和f(y,x)提供不同的输出。

我正在使用具有Adagrad多层结构的密集神经网络来学习整个训练集。

部分问题是由于随机(非对称)权重初始化引起的。

但是看起来在每个神经元上进行对称权重将失去使用DNN的好处。

是否可以使用DNN解决此问题,或者采用什么方法

示例:

from __future__ import absolute_import, division, print_function

import pathlib

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

import tensorflow as tf
from tensorflow.keras import layers

print(tf.__version__)

train = pd.DataFrame([[0, 0], [0, 1], [1, 0], [1, 1]])
labels = pd.DataFrame([[0], [1], [1], [3]])



def build_model4():
  model4 = tf.keras.Sequential([
    layers.Dense(4, activation=tf.nn.elu, input_shape=(2,)),
    layers.Dense(4, activation=tf.nn.elu),
    layers.Dense(4, activation=tf.nn.elu),
    layers.Dense(1, activation=tf.nn.relu)
  ])



  optimizer = tf.keras.optimizers.Adagrad(lr=0.05, epsilon=None, decay=0.0)

  model4.compile(loss='mean_squared_error',
                optimizer=optimizer,
                metrics=['mean_absolute_error', 'mean_squared_error'])
  return model4




model4 = build_model4()
model4.summary()


EPOCHS = 500

history = model4.fit(
  train, labels,  epochs=EPOCHS, batch_size=4, verbose=0)

hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
hist.tail()
plt.plot(history.history['mean_squared_error'], label='train')

test=pd.DataFrame([[1, 2], [2, 1]])
o=model4.predict(test)
print(o)

1 个答案:

答案 0 :(得分:0)

如果您的模型本质上是非对称的,则有一种简单的方法可以明确地强制对称:

g(x, y) = g(y, x) = 1/2 * (f(x, y) + f(y, x))