如何训练神经网络并将其复制为更大网络的块?

时间:2019-03-19 03:46:52

标签: tensorflow neural-network

我有一个由7个组组成的输入,每个组有3个值:

[ a0, a1, a2, b0, b1, b2, ..., g0, g1, g2]

3个值彼此之间密切相关,并且所有7个组的行为相同,因此可以对每个值进行相同的处理。

我想创建一个小型神经网络来处理组信息(3个值),然后将其复制(作为7个块)以处理所有输入。因此,所有这些块将具有相同的权重,并且每个块将负责一个组。最后,这些块的输出将重新组合并由另一个NN处理。

我之所以这样问,是因为我想尽量减少训练第一层的工作量(负责处理输入)。利用这些组中每个组都具有相同行为的事实来训练其中的一部分。

我要的是一个 ConvNet 内核。但是, ConvNet 内核将处理3个相邻值的每组,将(a0,a1,a2),(a1,a2,b0),(a2,b0,b1), etc.之类的组混合并创建更大的输出。

我从tensorflow开始,我不知道如何创建此模型。您能帮我思考如何创建它吗?

2 个答案:

答案 0 :(得分:1)

您说得对,我认为ConvNet是必经之路。 为了避免a(n)和b(n)之间的“混合”(在您的示例中),可以在Conv图层中使用“ strides =“作为参数。 示例:

x = Conv1D(nb_features, kernel_size=(3), strides=(3), padding='valid')(x)

这将具有(7 * 3)/ 3 = 7个输出的输出。相应地选择nb_features,以保留大量信息。例如:

nb_features = 3

可能是一个起点。

答案 1 :(得分:0)

我如何解决它:Variable Sharing

所有块都使用相同的变量集(权重和偏差)。 为此,必须命名所有变量。
使用命名变量,在创建图层时,所有权重都可以引用已经存在的变量。
最后,可以将块的输出连接起来,并用作另一个网络的输入。

此结构的名称为:暹罗神经网络
我不知道名字,所以没有找到任何名字。

现在我有了名字,我发现了这个问题: Siamese Neural Network in TensorFlow