我有一个训练有素的模型,我已经导出了权重,并希望部分加载到另一个模型中.我的模型使用TensorFlow作为后端在Keras中构建.
现在我正在做如下:
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape, trainable=False))
model.add(Activation('relu', trainable=False))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), trainable=False))
model.add(Activation('relu', trainable=False))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), trainable=True))
model.add(Activation('relu', trainable=True))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.load_weights("image_500.h5")
model.pop()
model.pop()
model.pop()
model.pop()
model.pop()
model.pop()
model.add(Conv2D(1, (6, 6),strides=(1, 1), trainable=True))
model.add(Activation('relu', trainable=True))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
我确信这是一种可怕的方式,尽管它有效.
如何加载前9层?
是否可以使用TensorFlow进行边界框预测?我在github上找到了TensorBox,但我正在寻找一个更好的支持或者可能是官方方式来解决这个问题.
我需要为我自己的课程重新训练模型.
我的项目使用Python在TensorFlow上训练MLP,然后以这种方式导出图形和权重:
tf.train.write_graph(sess.graph_def, "./", "inp.txt", True)
saver.save(sess, 'variables/model.ckpt', global_step=1)
Run Code Online (Sandbox Code Playgroud)
现在,尽管使用这两个文件将其导回到Python是好的,但似乎不可能将它用于Android或C++,因为它无法输入检查点.ckpt.
现在,我正在使用freeze_graph.py谷歌提供的脚本将两个文件合并为一个:
bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=inp.txt --input_checkpoint=variables/model.ckpt-1 --output_graph=newoutput.pb --output_node_names=output
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法使用另一个函数而不是tf.train.write_graph导出它包含权重?