gpt4 book ai didi

python - 使用keras同时训练两个网络

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:03 24 4
gpt4 key购买 nike

假设您想要使用同一数据集同时训练两个略有不同的网络。一种方法是通过功能性 API:https://keras.io/getting-started/functional-api-guide/ .以下是它在简单架构(只有两个具有相同输入/输出的多层密集网络)上的工作方式:

same_input = Input(shape=(n_feat, ), name='input')

x = Dense(n_feat//2, kernel_initializer='uniform', activation='relu')(same_input)
x = Dense(n_feat//128, kernel_initializer='uniform', activation='elu')(x)
x = Dropout(dropout_val)(x)
x = BatchNormalization()(x)
x = Dense(n_feat//256, kernel_initializer='uniform', activation='relu')(x)
x_out = Dense(out_dim, kernel_initializer='normal', name='output_x')(x)

y = Dense(n_feat//2, kernel_initializer='uniform', activation='relu')(same_input)
y = Dropout(dropout_val)(y)
y = Dense(n_feat//128, kernel_initializer='uniform', activation='elu')(y)
.... (some difference)
y = Dropout(dropout_val)(y)
y = BatchNormalization()(y)
y_out = Dense(out_dim, kernel_initializer='uniform', name='output_y')(y)


model = Model(inputs=same_input,
outputs=[x_out, y_out])

model.compile(optimizer='rmsprop',
loss={'output_x': 'mean_squared_error',
'output_y': 'mean_absolute_error'},
loss_weights={'output_x': 1,
'output_y': 1.})

model.fit({'input': X},
{'output_x': Y, 'output_x': Y},
epochs=fit_pars['num_ep'],
batch_size=b_size,
validation_split=valid_split,
callbacks=callbacks,
verbose=2)

network_predict = np.array(model.predict(X_test, batch_size=b_size))

但是,我不确定这是否正确,以及是否有一种方法可以在 Keras 上正确执行。用于优化网络的总损失将是以下总和这两个损失,这在两个网络之间造成了干扰。谁能告诉我这是对还是错,是否有办法同时独立地训练网络?

最佳答案

我认为您的方法没有任何问题。假设您有两个网络 N1N2,损失函数分别为 L1L2。当您使用组合损失函数 L=L1+L2 时,L 的梯度 wrt。 N1 中的参数 wL1 wrt 的梯度相同。 w 当且仅当 L2 不依赖于 w。同样的事情适用于 N2 中的任何参数 w

因此,当您使用组合损失函数通过基于梯度的方法(例如 RMSprop)优化您的网络 N1N2 时,您应该获得相同的更新就像您在独立优化 N1N2 一样,因为您的两个网络具有不同的参数(即它们不共享权重)。

关于python - 使用keras同时训练两个网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51230874/

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