[大家好,我们一直试图将模型保存为.bytes格式,以便我们可以在c#脚本中使用它。我们正在使用tensorflow 1.7.0这是我们的模型:
bsize=16
# define cnn model
def define_model():
# load model
model = VGG16(include_top=False, input_shape=(224, 224, 3))
# mark loaded layers as not trainable
for layer in model.layers:
layer.trainable = False
# add new classifier layers
flat1 = Flatten()(model.layers[-1].output)
class1 = Dense(128, activation='relu', kernel_initializer='he_uniform')(flat1)
output = Dense(2, activation='softmax')(class1)
# define new model
model = Model(inputs=model.inputs, outputs=output)
# compile model
# compile model
opt = Adam(lr=0.001)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
return model
培训:
sess=tf.Session()
tf.global_variables_initializer().run(session=sess)
model = define_model()
# create data generator
datagen = ImageDataGenerator(rescale=1.0/255.0)
# prepare iterators
train_it = datagen.flow_from_directory(mpath+'/train',
class_mode='categorical', batch_size=bsize, target_size=(224, 224))
test_it = datagen.flow_from_directory(mpath+'/test',
class_mode='categorical', batch_size=bsize, target_size=(224, 224))
# fit model
history = model.fit_generator(train_it, steps_per_epoch=len(train_it),
validation_data=test_it, validation_steps=len(test_it), epochs=1, verbose=0)
# evaluate model
_, acc = model.evaluate_generator(test_it, steps=len(test_it), verbose=0)
print('> %.3f' % (acc * 100.0))
model.save_weights("weights.h5")
冻结:
K.clear_session()
K.set_learning_phase(0)
model = define_model()
model.load_weights("weights.h5")
save_dir = "./out"
tf.saved_model.simple_save(K.get_session(),
save_dir,
inputs={"input": model.inputs[0]},
outputs={"output": model.outputs[0]})
freeze_graph.freeze_graph(None,
None,
None,
None,
model.outputs[0].op.name,
None,
None,
os.path.join(save_dir, "frozen_model.bytes"),
False,
"",
input_saved_model_dir=save_dir)
然后,我们尝试使用以下命令查看输入和输出名称:
model.inputs[0].name
model.ouputs[0].name
最后,我们想在c#中将此图形用作:
.AddInput(graph["input_1_1:0"][0], tensor).Fetch(graph["output"][0]);
但是,从错误中我们可以理解,输入和输出名称是错误的。而且,只要我们打电话
model.inputs[0].name
model.ouputs[0].name
即使我们将输出名称定义为name =“ output”,它们也会打印不同的输入和输出名称
您对如何冻结此模型,获取输入和输出名称等有任何建议吗?>
问候
[大家好,我们一直试图将模型保存为.bytes格式,以便我们可以在c#脚本中使用它。我们正在使用tensorflow 1.7.0,这是我们的模型:bsize = 16#define cnn model def define_model(...
怎么样:
对于那些有类似问题的人: