在运行时修改Tensorflow模型



我正试图在运行时修改tensorflow模型的数据流。考虑一个3层FC神经网络。假设我想为中间位置定义两个不同的层。

比方说,第一个选项:64神经元层第二种选择:128神经层。

然后在预测函数中,我想在输入数据的旁边给出一个输入,比如;

model.predict([x_test, decider])

然后,如果判定器为0,我希望我的模型执行64个神经元层作为中间层。否则,我希望我的模型执行128个神经元层作为中间层。

如果我选择其中一个,出于性能原因,我不希望执行另一个选项。

注意:我不喜欢训练。

有办法做到这一点吗?到目前为止,我一直在尝试使用tf.cond((,但无法使其工作。

我认为您可以通过重新组合独立的模型来实现同样的目标:

import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
# First model
input_shape = (16, )
inputs_0 = layers.Input(shape=input_shape)
outputs_0 = layers.Dense(256, 'relu')(inputs_0)
fc_0 = models.Model(inputs_0, outputs_0)
# Middel model 0
inputs_1_0 = layers.Input(shape=(256, ))
outputs_1_0 = layers.Dense(64, 'relu')(inputs_1_0)
outputs_1_0 = layers.Dense(128, 'relu')(outputs_1_0)
fc_1_0 = models.Model(inputs_1_0, outputs_1_0)
# Middel model 1
inputs_1_1 = layers.Input(shape=(256, ))
outputs_1_1 = layers.Dense(128, 'relu')(inputs_1_1)
outputs_1_1 = layers.Dense(128, 'relu')(outputs_1_1)
fc_1_1 = models.Model(inputs_1_1, outputs_1_1)
# Last model
inputs_2 = layers.Input(shape=(128, ))
outputs_2 = layers.Dense(1, 'sigmoid')(inputs_2)
fc_2 = models.Model(inputs_2, outputs_2)
def custom_model(x, d):
h = fc_0(x)
if d == 1:
h = fc_1_0(h)
else:
h = fc_1_1(h)
return fc_2(h)
x = np.random.rand(1, input_shape[0])
decider = 0 # Middel model 0 or 1
y = custom_model(x, decider)

最新更新