Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

the predict is not with the same result of evaluate #12

Open
WoNiuHu opened this issue Nov 9, 2017 · 4 comments
Open

the predict is not with the same result of evaluate #12

WoNiuHu opened this issue Nov 9, 2017 · 4 comments

Comments

@WoNiuHu
Copy link

WoNiuHu commented Nov 9, 2017

when I predict the model, the result is not the same with evaluate, and the result has much difference. I fetch the fc_weight , save to model and restore from model of the weight is not the same. Maybe the model has something wrong.

@wenxinxu
Copy link
Owner

wenxinxu commented Nov 9, 2017

Do you mind sharing your code for testing? Did you try loading the saved checkpoint directly?

@WoNiuHu
Copy link
Author

WoNiuHu commented Nov 9, 2017

def predict_tfrecords_by_checkpoint_image(checkpoint_dir, in_file_pattern, to_file):

config = ConfigParser.ConfigParser()
config.read(flags.FLAGS.predict_meta_file)
input_shape = config.getint("Input", "INPUT_SHAPE")
frozen_graph_path = os.path.join(checkpoint_dir, "model.pb")
prefix = "prefix"
graph = _load_graph(frozen_graph_path, prefix)
with tf.Session(graph=graph, config=_build_config_proto()) as sess:
    # First let's load meta graph and restore weights.
    # checkpoint = tf.train.latest_checkpoint(checkpoint_dir)
    # saver = tf.train.import_meta_graph("%s.meta" % checkpoint)
    # saver.restore(sess, checkpoint)
    #
    # # Get the input & output node of the graph.
    # graph = tf.get_default_graph()

    image_raw = graph.get_tensor_by_name('%s/image_raw:0' % prefix)
    y = graph.get_tensor_by_name('%s/y:0' % prefix)
    fc_weights = graph.get_tensor_by_name('%s/fc/fc_weights:0' %prefix)

    ys = []
    pred_ys = []
    for batch in tqdm(_batch_iter_in_tfrecord_files_image(in_file_pattern, batch_size=1)):
        label_batch, image_raw_batch = list(zip(*batch))

        y_out, _fc_weights = sess.run([y,fc_weights] , feed_dict={
            image_raw: image_raw_batch
        })
        with open("fc_weight6", 'w') as file:
            file.write(','.join(str(i) for i in _fc_weights))
        if isinstance(y_out, numpy.ndarray):
            pred_ys += list(y_out)
            ys += label_batch
        else:
            pred_ys += [y_out]
            ys += label_batch

    with open(to_file, "w") as fout:
        for y, pred_y in zip(ys, pred_ys):
            pred_y = ','.join(str(item) for item in pred_y)
            fout.write("%s\t%s\n" % (y, pred_y))

    print "==> predict in %s" % to_file`

@WoNiuHu
Copy link
Author

WoNiuHu commented Nov 9, 2017

`def record_image_placeholder_input_fn(meta_file, default_batch_size=None):
"""Build the serving inputs.

Args:
  default_batch_size (int): Batch size for the tf.placeholder shape
"""
input_meta = _parse_record_meta(meta_file)
LABELS = input_meta["LABELS"]
INPUT_SHAPE = input_meta["INPUT_SHAPE"]   # here is 3072

inputs = {
    'image_raw': tf.placeholder(dtype=tf.int64, shape=[None, INPUT_SHAPE], name="image_raw")
}

features = {
    'image_raw': inputs['image_raw']
}

return features, inputs`

@WoNiuHu
Copy link
Author

WoNiuHu commented Nov 9, 2017

Actually , I rewrite the model, in the training process, it can run normally and also evaluate the model , in 20k train steps, it has the accuracy about 0.7, but when the model saved, I predict it again, it's accuracy is about 0.1, when I debug this , I found the last weight saved in model, and then I restored the model, but the same weight did not the same.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants