我有一个神经网络,它已经在本地训练过,可以检测场景中的物体。
但是我必须将神经网络分成两部分,假设它有 16 层,我想让一个微服务处理前 8 层,并将第 8 层的输出提供给下一个微服务,它从那里获取数据并继续第 9 层(第 2 个微服务中的第 1 层)。
将图像发送到第一个微服务将给出来自第二个微服务的结果,使用 TensorFlow 是否可行?
我有一个神经网络,它已经在本地训练过,可以检测场景中的物体。
但是我必须将神经网络分成两部分,假设它有 16 层,我想让一个微服务处理前 8 层,并将第 8 层的输出提供给下一个微服务,它从那里获取数据并继续第 9 层(第 2 个微服务中的第 1 层)。
将图像发送到第一个微服务将给出来自第二个微服务的结果,使用 TensorFlow 是否可行?
是的,您可以在训练后将模型分成两部分。不确定,有什么好处,但这是可能的。高级步骤:
在此之后,服务 1 可以运行前几层并将输出提供给服务 2。
拆分模型的示例代码(代码使用 Keras 作为 TensorFlow 的包装器):
import keras
from keras.models import Model, load_model
from keras.layers import Input, Dense
from keras.optimizers import RMSprop
import numpy as np
# Create original model and save it
inputs = Input((1,))
dense_1 = Dense(10, activation='relu')(inputs)
dense_2 = Dense(10, activation='relu')(dense_1)
dense_3 = Dense(10, activation='relu')(dense_2)
outputs = Dense(10)(dense_3)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=RMSprop(), loss='mse')
model.save('test.h5')
# Load the model and make modifications to it
loaded_model = load_model('test.h5')
loaded_model.layers.pop()
loaded_model.layers.pop()
# Create your new model with the two layers removed and transfer weights
new_model = Model(inputs=inputs, outputs=dense_1)
new_model.compile(optimizer=RMSprop(), loss='mse')
new_model.set_weights(loaded_model.get_weights())
new_model.summary()
new_model.save('test_complete.h5')