我已经成功地在我的数据上训练了attention_ocr,现在我正在尝试进行推理运行(tensorflow版本1.2.1)。
我根据git自述文件中提到的内容使用以下代码来使用预训练模型,但我总是得到一个重复字符的列表,该列表在每次运行时都会发生变化(如38,38,38...)。这显然是错误的,因为根据训练过程中对测试集的评估,我应该有90%以上的字符准确率!
以前有人试过这个吗?或者有人能为我提供一些修复它的提示?
images_placeholder = tf.placeholder(tf.float32, shape=[1, height, width, channels])
images_actual_data = cv2.imread(imageFname)
images_actual_data = cv2.cvtColor(images_actual_data, cv2.COLOR_BGR2RGB)
# some range normalization that is also done for training data
images_actual_data = images_actual_data.astype('float32')
images_actual_data -= images_actual_data.min()
images_actual_data /= images_actual_data.max()
images_actual_data -= 0.5
images_actual_data *= 2.5
model = common_flags.create_model(69,23,1,68) # based on the trained model
endpoints = model.create_base(images_placeholder, labels_one_hot=None)
with tf.Session() as sess:
init_fn = model.create_init_fn_to_restore('/path-to-trained-models/model.ckpt-1126202', '')
sess.run(tf.global_variables_initializer()) # tried to run sess.run(init_fn) here, but it fails
predictions = sess.run(endpoints.predicted_chars, feed_dict={images_placeholder:images_actual_data.reshape(1,imHeight,imWidth,imChannel)})
print predictions发布于 2017-08-08 17:58:56
我把它弄好了。我没有在会话中正确地运行一些东西。总之,在运行预测之前添加以下行,就解决了这个问题:
init_fn(sess)这显然不是运行预先训练好的模型的最佳方式(在git页面上推荐使用serving infrastructure ),但就目前的调试目的而言,这对我来说很好。
发布于 2017-08-08 01:59:04
我的猜测是范围归一化部分不正确。在一次训练中,模型uses tf.image.convert_image_dtype。因此,请尝试替换:
images_actual_data -= images_actual_data.min()
images_actual_data /= images_actual_data.max()使用
images_actual_data /= 255.0https://stackoverflow.com/questions/45551656
复制相似问题