gpt4 book ai didi

python - 如何绑定(bind)权重来训练同一模型的多个副本

转载 作者:行者123 更新时间:2023-12-01 07:35:26 24 4
gpt4 key购买 nike

我需要实现下面的模型。

我必须对一系列数据执行函数 A 和函数 B。函数A使用神经网络实现,其输出输入到函数B(不是神经网络,而是在Keras中使用模型功能API实现),然后在函数B的输出处计算损失函数。

输入是复数的 L 长度向量。我需要将其并行输入到同一网络(顺序)的 L 个副本。一个网络获取一个元素的实数和虚数并输出 m 个实数。

因此所有 L 个网络总共将输出 mL 个实数。函数B将把这mL个实数作为输入并计算输出。

这就是我大致的计划,

model_inputs = keras.layers.Input(shape=(L,))

function_A_model = Sequential()
function_A_model.add(Dense(32, activation='relu'))
function_A_model.add(Dense(m)) # Output layer

function_A_inputs = [layers.Input(shape=(2,)) for i in range(L)]

function_A_outputs = []
for i in range(L):
function_A_outputs = [function_A_outputs function_A_model(function_A_inputs[i]) ]

function_B_outputs = function_B(function_A_outputs)

我想使用模型功能 API 将其实现为一个更大的模型,它将采用上面的 model_inputs 并输出 function_B_outputs。

我的问题是,

  1. 我需要将 model_inputs 输入向量划分为形状为 2 的 L 个输入向量。如何在层中完成此操作?或者有一个输入向量可以吗?

  2. 如何在同一网络的 L 个副本中实现功能 A(权重绑定(bind))

  3. 如何将 m*L 输出合并到一个输出向量,以便将其输入到函数 B?

最佳答案

My problems are, I need to divide the model_inputs Input vector for L Input vectors of shape 2. How can I accomplish this in layers?

您可以定义一个对输入进行切片的 Lambda 层。例如:

example = Input(shape=(20,))
slice_0_4 = Lambda(lambda x: x[:, :4])(example)
slice_4_16 = Lambda(lambda x: x[:, 4:16])(example)
slice_16_20 = Lambda(lambda x: x[:, 16:])(example)

or is it ok to have a vector of inputs?

您可以拥有任何所需形状的张量,包括 (N, M) 形状。

例如,如果您声明一个模型:

L = Input(shape=(20, 10,))
h1 = Dense(8)(L)

上面的密集层将应用于输入的所有 20 个时间步长。密集层跨时间步共享权重。因此,相同的 w 矩阵将在所有时间步长的所有批处理中相乘,进行 10x8 矩阵乘法。

How do I implement the function A in L copies of the same network (weights are tied)

我不确定我是否明白你的问题。您可以让顶级模型拆分其输入并使用输入的切片调用子模型;或者您可以拥有一个在包含额外维度的矩阵上执行相同操作集的模型。

How do I merge the m*L outputs to one Output vector so I can input it to function B?

您可以使用 keras Concatenate 层。

关于python - 如何绑定(bind)权重来训练同一模型的多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57012366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com