Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neural network TensorFlow中的暹罗神经网络_Neural Network_Tensorflow_Deep Learning_Lstm - Fatal编程技术网

Neural network TensorFlow中的暹罗神经网络

Neural network TensorFlow中的暹罗神经网络,neural-network,tensorflow,deep-learning,lstm,Neural Network,Tensorflow,Deep Learning,Lstm,我试图在TensorFlow中实现一个连体神经网络,但我在互联网上找不到任何有效的例子(请参阅) 我试图构建的体系结构将由两个共享权重的LSTM组成,并且仅在网络的末端连接 我的问题是:如何构建两个不同的神经网络,在TensorFlow中共享它们的权重(绑定权重),以及如何在最后连接它们 谢谢:) 编辑:我在MNIST上实现了一个简单而有效的暹罗网络示例。使用tf.layers更新 如果您使用tf.layers模块构建网络,只需对暹罗网络的第二部分使用参数reuse=True: x=tf.on

我试图在TensorFlow中实现一个连体神经网络,但我在互联网上找不到任何有效的例子(请参阅)

我试图构建的体系结构将由两个共享权重的LSTM组成,并且仅在网络的末端连接

我的问题是:如何构建两个不同的神经网络,在TensorFlow中共享它们的权重(绑定权重),以及如何在最后连接它们

谢谢:)

编辑:我在MNIST上实现了一个简单而有效的暹罗网络示例。

使用
tf.layers更新
如果您使用
tf.layers
模块构建网络,只需对暹罗网络的第二部分使用参数
reuse=True

x=tf.ones((1,3))
y1=tf.layers.density(x,4,name='h1')
y2=tf.layers.dense(x,4,name='h1',reuse=True)
#y1和y2将计算为相同的值
sess=tf.Session()
sess.run(tf.global\u variables\u initializer())
打印(sess.run(y1))
打印(sess.run(y2))#两次打印将返回相同的值

带有
tf.get\u变量的旧答案
您可以尝试使用函数
tf.get\u variable()
。(见附件)

使用具有
重用=False的变量作用域实现第一个网络:

with tf.variable_scope('Inference', reuse=False):
    weights_1 = tf.get_variable('weights', shape=[1, 1],
                              initializer=...)
    output_1 = weights_1 * input_1
然后使用相同的代码实现第二个,除了使用
reuse=True

with tf.variable_scope('Inference', reuse=True):
    weights_2 = tf.get_variable('weights')
    output_2 = weights_2 * input_2
第一个实现将创建并初始化LSTM的每个变量,而第二个实现将使用
tf.get_variable()
来获取第一个网络中使用的相同变量。这样,变量将共享


然后你只需要使用你想要的任何损失(例如,你可以使用两个暹罗网络之间的L2距离),梯度将通过两个网络反向传播,用梯度的和更新共享变量

你也可以定义所有变量,如
权重=tf.Variable(…)
,然后在每次推理中使用这些变量,
output_1=weights*input_1
output_2=weights*input_2
。与共享变量一样,这里的变量
权重
将接收两个渐变和两个渐变更新。我怀疑,是否有必要使用tf.get_variable()?我们可以直接使用tf.conv2d()而不使用tf.get_variable()创建变量吗?@kunal18:我添加了一个带有
tf.layers
的示例,感谢您的更新!请看我的问题: