0

我正在尝试为物理科学中的特定问题创建一个 NN 模型,我的动机是减少权重的数量并根据物理见解共享权重。神经网络看起来像:

在此处输入图像描述

输入大小为 2n,其中前 n 个输入 (X 1 .. X n ) 被馈送到第一个隐藏层 - 然而,神经网络的连通性是唯一的,因为只有一个输入被馈送到每个单元第一个隐藏层。此外,所有权重在输入之间共享。

第二层中的每个单元都有 2 个输入 - 一个来自前一层,一个直接来自原始输入 (X n+1 .. X 2n )。相应地共享权重和偏差。

最后,输出层有 1 个单元,有 100 个输入(来自第二个隐藏层的所有输出),并且对每个单元应用相同的权重和偏差。

4

1 回答 1

1

此代码将解决您的问题(假设您想在最后将所有输入添加到输出中)顺便说一句,如果您没有任何激活,您描述的操作是线性的并且可以很容易地简化。

import tensorflow.keras as keras
import tensorflow.keras.layers as layers
input_shape = [1]
num_inputs = 4

inputs = [layers.Input(shape=input_shape, name=f"input_{i}") for i in range(num_inputs)]
x = [i for i in inputs]
dense_1 = layers.Dense(units=1, use_bias=False, name="1")
dense_21 = layers.Dense(units=1, use_bias=True, name="21")
dense_22 = layers.Dense(units=1, use_bias=False, name="22")
dense_3 = layers.Dense(units=1, use_bias=True, name="3")

for i in range(num_inputs//2):
    # First hidden layer
    x[i] = dense_1(x[i])
    # Second hidden layer
    x[i] = dense_21(x[i])
    # Connect with the other inputs
    x[i + num_inputs // 2] = dense_22(x[i + num_inputs // 2])
    x[i] = layers.Add()([x[i], x[i + num_inputs // 2]])
    # Last one
    x[i] = dense_3(x[i])

# Add all
x = layers.Add()(x[:num_inputs//2])

model = keras.Model(inputs=inputs,
                    outputs=x)

keras.utils.plot_model(model=model,
                       to_file="model.png",
                       show_shapes=True)

上述代码的情节是: 在此处输入图像描述

于 2020-07-28T16:03:27.470 回答