【问题标题】:ValueError: GraphDef cannot be larger than 2GBValueError: GraphDef 不能大于 2GB
【发布时间】:2017-06-13 12:00:24
【问题描述】:

我正在使用 tensorflow 的 imageNet 训练模型对多个类别的图像进行分类。

我将脚本classify.py编辑为

import tensorflow as tf
import sys
import glob
import os
import pandas as pd

# Disable tensorflow compilation warnings
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

test_path = '/Users/kaustubhmundra/Desktop/Multi-Class Classifier/test'

classes = ['room','reception','washroom','facade']

result = pd.DataFrame(columns = ['facade','washroom','room','reception'])

def predict(image_path):
    #image_path = sys.argv[1]

    # Read the image_data
    image_data = tf.gfile.FastGFile(image_path, 'rb').read()

    # Loads label file, strips off carriage return
    label_lines = [line.rstrip() for line 
                       in tf.gfile.GFile("tf_files/retrained_labels.txt")]

    # Unpersists graph from file
    with tf.gfile.FastGFile("tf_files/retrained_graph.pb", 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        _ = tf.import_graph_def(graph_def, name='')

    with tf.Session() as sess:
        # Feed the image_data as input to the graph and get first prediction
        softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')

        predictions = sess.run(softmax_tensor, \
                 {'DecodeJpeg/contents:0': image_data})

        # print(predictions)

        pred = pd.DataFrame(predictions,columns = ['facade','washroom','room','reception'])

        # print(pred)

        global result

        result = result.append(pred)

        # print(result)

        # Sort to show labels of first prediction in order of confidence
        top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]

        for node_id in top_k:
            human_string = label_lines[node_id]
            score = predictions[0][node_id]
            print('%s (score = %.5f)' % (human_string, score))



path = os.path.join(test_path, '*')
files = sorted(glob.glob(path))

i=1

for fl in files:
    print(i)
    i = i + 1
    predict(fl)

result.to_csv('predictions.csv')

虽然我用它来预测图像,但它在 24 张图像之前都能正常工作,但随后会显示错误:

文件 "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", 第 2154 行,在 _as_graph_def 中 raise ValueError("GraphDef 不能大于 2GB。") ValueError: GraphDef 不能大于 2GB。

我该如何解决这个问题?

【问题讨论】:

    标签: python image-processing tensorflow


    【解决方案1】:

    每次调用 predict() 时都会导入图形,因此会累积一个非常大的默认 graphdef。您应该更改代码,以便在预测函数之外只加载一次图表(“# Unpersists graph from file”部分)。这也应该会大大加快您的代码速度。

    【讨论】:

    • 非常感谢!这非常有效。这很简单,我不知道为什么它没有打动我。 :)
    • 有类似的问题。您是如何通过加载图表一次来解决它的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2016-12-15
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多