gpt4 book ai didi

python - 如何在 Tensorflow 中恢复训练好的模型并计算测试精度

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:22 26 4
gpt4 key购买 nike

我已经训练了我的 CNN 模型并将其存储在名为 model 的目录中,该目录包含如下所示的文件

\model
|--- checkpoint
|--- model.data-00000-of-00001
|--- model.index
|--- model.meta

我想恢复模型并计算我正在使用以下代码的测试精度

import tensorflow as tf
import numpy as np
import cv2
import os
import glob

images = []
labels = []
img_names = []
cls = []

test_path = 'data\\cifar-10\\test'
image_size = 32
num_channels = 3

# Prepare input data
with open('data\\cifar-10\\wnids.txt') as f:
classes = f.readlines()
classes = [x.strip() for x in classes]

num_classes = len(classes)

for fields in classes:
index = classes.index(fields)
print('Read {} files (Index: {})'.format(fields, index))
path = os.path.join(test_path, fields, '*g')
files = glob.glob(path)
for fl in files:
image = cv2.imread(fl)
image = cv2.resize(image, (image_size, image_size),0,0, cv2.INTER_LINEAR)
image = image.astype(np.float32)
image = np.multiply(image, 1.0 / 255.0)
images.append(image)
label = np.zeros(len(classes))
label[index] = 1.0
labels.append(label)
flbase = os.path.basename(fl)
img_names.append(flbase)
cls.append(fields)

images = np.array(images)
labels = np.array(labels)
img_names = np.array(img_names)
cls = np.array(cls)

session = tf.Session()
tf_saver = tf.train.import_meta_graph('model\\model.meta')
tf_saver.restore(session, tf.train.latest_checkpoint('model'))

x = tf.placeholder(tf.float32, shape=[None, image_size, image_size, num_channels], name='x')
y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')
y_true_cls = tf.argmax(y_true, axis=1)

y_pred = tf.nn.softmax(layer_fc2, name='y_pred')
y_pred_cls = tf.argmax(y_pred, axis=1)

correct_prediction = tf.equal(y_pred_cls, y_true_cls)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

feed_dict_test = {x: images, y_true: labels}

test_acc = session.run(accuracy, feed_dict=feed_dict_test)

msg = "Test Accuracy: {1:>6.1%}"
print(msg.format(test_acc))

运行上面的代码时出现错误

NameError: name 'layer_fc2' is not defined

如何正确还原模型并计算测试精度?

最佳答案

layer_fc2 是在您的训练脚本(您定义图形的地方)中定义的 python 变量,此处不存在。你需要做的就是找到这一层。不幸的是,你没有在训练时间命名它。将您的 create_fc_layer 代码更改为

def create_fc_layer(input, num_inputs, num_outputs, name, use_relu=True):
weights = create_weights(shape=[num_inputs, num_outputs])
biases = create_biases(num_outputs)
layer = tf.matmul(input, weights) + biases
if use_relu:
layer = tf.nn.relu(layer)

return tf.identity(layer, name=name) # return a named layer

...

layer_fc2 = create_fc_layer(input=layer_fc1, num_inputs=fc_layer_size, num_outputs=num_classes, name='layer_fc2', use_relu=False)

在此之后,在您的新脚本中:

layer_fc2 = session.graph.get_operation_by_name('layer_fc2')

顺便说一下,您也不需要重新定义 y_predy_pred_cls 等。给它们命名,只需从恢复的图中获取即可。

关于python - 如何在 Tensorflow 中恢复训练好的模型并计算测试精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46743430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com