向经过训练的tensorflow keras模型添加重缩放层(或任何层)

2024-04-28 12:44:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用tensorflow 2.3训练的tensorflow keras模型。该模型将图像作为输入,但是该模型使用缩放输入进行训练,因此在将图像输入模型之前,我们必须将图像缩放255

由于我们在各种平台上使用此模型,我试图通过修改模型来简化此过程,以便在keras模型的开始处(即输入后立即)插入一个重缩放层。因此,该模型的任何未来消费都可以简单地传递图像,而无需缩放图像

我很难让它正常工作。我知道我需要使用以下功能来创建重缩放层

tf.keras.layers.experimental.preprocessing.Rescaling(255, 0.0, "rescaling")

但我不确定如何将其插入模型的开头

先谢谢你


Tags: 模型图像功能过程layerstftensorflow平台
1条回答
网友
1楼 · 发布于 2024-04-28 12:44:54

可以将该层插入到经过训练的模型顶部。下面是一个示例,我们首先训练一个模型,手动缩放输入,然后使用相同的训练模型,但在顶层添加一个Rescaling

from tensorflow.keras.layers.experimental.preprocessing import Rescaling

# generate dummy data
input_dim = (28,28,3)
n_sample = 10

X = np.random.randint(0,255, (n_sample,)+input_dim)
y = np.random.uniform(0,1, (n_sample,))

# create base model
inp = Input(input_dim)
x = Conv2D(8, (3,3))(inp)
x = Flatten()(x)
out = Dense(1)(x)

# fit base model with manual scaling
model = Model(inp, out)
model.compile('adam', 'mse')
model.fit(X/255, y, epochs=3)

# create new model with pretrained weight + rescaling at the top
inp = Input(input_dim)
scaled_input = Rescaling(1/255, 0.0, "rescaling")(inp)
out = model(scaled_input)
scaled_model = Model(inp, out)

# compare prediction with manual scaling vs layer scaling
pred = model.predict(X/255)
pred_scaled = scaled_model.predict(X)

(pred.round(5) == pred_scaled.round(5)).all() # True

相关问题 更多 >