应用经过培训的Tensorflow

时间:2017-12-08 06:32:43

标签: python tensorflow neural-network

在培训过程中,我使用train_test_split()将数据集拆分为训练和测试数据:

opencv-3.3.1

在训练并获得准确率之后,如何在整个数据集上应用此训练模型而不仅仅是测试数据?

3 个答案:

答案 0 :(得分:0)

假设'OutPut'是神经网络的导出;因此,'InPut'是您可以提供数据的地方。然后,您使用您正在训练的相同会话运行网络.'OutPutData'将是计算结果。

OutPutData = session.run(OutPut, feed_dict={ InPut: Data})

答案 1 :(得分:0)

在恢复保存的变量之前,Tensorflow需要一个空的网络结构。如果你不喜欢这个,我推荐Keras。在这个例子中,着名的AlexNet被恢复以对一些图像进行分类。我希望它包含您需要的代码。

import time
import tensorflow as tf
from alexnet import AlexNet
from imageio import imread
import numpy as np
from caffe_classes import class_names

#Tensor 
x = tf.placeholder(tf.float32, (None, 227, 227, 3))
probs = AlexNet(x, feature_extract=False)


sess = tf.Session()
sess.run(tf.global_variables_initializer())

saver = tf.train.Saver()
save_file = './model.ckpt'
saver.restore(sess, save_file)

# Read Images
im1 = (imread(".\Example_Figs\weasel.png")[:, :, :3]).astype(np.float32)
im1 = im1 - np.mean(im1)
im1[:, :, 0], im1[:, :, 2] = im1[:, :, 2], im1[:, :, 0]

im2 = (imread(".\Example_Figs\poodle.png")[:, :, :3]).astype(np.float32)
im2 = im2 - np.mean(im2)
im2[:, :, 0], im2[:, :, 2] = im2[:, :, 2], im2[:, :, 0]

im3 = (imread(".\Example_Figs\dog.png")[:, :, :3]).astype(np.float32)
im3 = im3 - np.mean(im3)
im3[:, :, 0], im3[:, :, 2] = im3[:, :, 2], im3[:, :, 0]

im4 = (imread(".\Example_Figs\dog2.png")[:, :, :3]).astype(np.float32)
im4 = im4 - np.mean(im4)
im4[:, :, 0], im4[:, :, 2] = im4[:, :, 2], im4[:, :, 0]

im5 = (imread(".\Example_Figs\quail.jpg")[:, :, :3]).astype(np.float32)
im5 = im5 - np.mean(im5)
im5[:, :, 0], im5[:, :, 2] = im5[:, :, 2], im5[:, :, 0]


t = time.time()
output = sess.run(probs, feed_dict={x: [im1, im2, im3, im4, im5]})

# Print Output
for input_im_ind in range(output.shape[0]):
    inds = np.argsort(output)[input_im_ind, :]
    print("Image", input_im_ind)
    for i in range(5):
        print("%s: %.3f" % (class_names[inds[-1 - i]], output[input_im_ind, inds[-1 - i]]))
    print()

print("Time: %.3f seconds" % (time.time() - t))

答案 2 :(得分:0)

请澄清整个数据集"的含义。你的意思是火车和测试装置连在一起吗?如果是这样,那么在分割之前,该集合位于数据标签变量中。您可以将这些内容传递给 sess.run 执行此类操作以获得全部损失。您可能需要稍微调整它以使索引匹配。

feed = {data_pl: data, target_pl: labels,...}
loss = sess.run(tf_loss, feed_dict=feed)

如果您只是想要独立地训练/测试集错误,那么您已经这样做了,所以只需从上一个纪元运行中获取值。这些是已经完成的行。

test_loss,predictions,acc_np = sess.run([tf_loss,preds,tf_acc],feed_dict=feed)
train_loss = sess.run(tf_loss, feed_dict=feed)