训练后测试Tensorflow CNN模型 [英] Test a tensorflow cnn model after the training

查看:116
本文介绍了训练后测试Tensorflow CNN模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了卷积神经网络的模型,实施了训练,现在我必须创建一个函数以在测试模式下运行该模型,但是我不知道该怎么做.

I created a model of a convolutional neural network, I implemented the training and now I have to create a function to run the model in test mode but I have no idea how I could do it.

应有的数据集,每个测试的模型都没有,测试的模型数据集的测试没有模子.

Ho due dataset, uno per l'allenamento e uno per il test quindi dovrei trovare un modo per testare il modello nel dataset di test.

我可以用与训练数据集相同的方式加载测试数据集,但是我不知道如何对已经训练的模型进行测试.

I could load the test dataset in the same way as the training dataset but then I would not know how to do the test on the model already trained.

这是模型功能

import tensorflow as tf

def cnn_model_fn(X, MODE, log=False):

    # INPUT LAYER
    with tf.name_scope('input_layer') as scope:
        input_layer = tf.reshape(X, [-1, 1000, 48, 1])

    # CONVOLUTIONAL LAYER #1
    with tf.name_scope('Conv1') as scope:
        conv1 = tf.layers.conv2d(
            inputs=input_layer,
            filters=4,
            kernel_size=[10, 10],
            strides=(2, 2),
            padding="valid",
        )
        if log==True:
            print('[LOG:conv1]: ' + str(conv1.shape))

        # apply the relu function
        conv1_relu = tf.nn.relu(conv1)
        if log==True:
            print('[LOG:conv1_relu]: ' + str(conv1_relu.shape))

    # POOLING LAYER #1
    with tf.name_scope('Pool1'):
        pool1 = tf.layers.max_pooling2d(
            inputs=conv1_relu,
            pool_size=[2, 2],
            strides=2
        )
        if log==True:
            print('[LOG:pool1]: ' + str(pool1.shape))

    # CONVOLUTIONAL LAYER #2
    with tf.name_scope('Conv2'):
        conv2 = tf.layers.conv2d(
            inputs=pool1,
            filters=64,
            kernel_size=[5, 5],
            padding="same",
        )
        if log==True:
            print('[LOG:conv2]: ' + str(conv2.shape))

        # apply the relu function
        conv2_relu = tf.nn.relu(conv2)
        if log==True:
            print('[LOG:conv2_relu]: ' + str(conv2_relu.shape))


    # POOLING LAYER #2
    with tf.name_scope('Pool2'):
        pool2 = tf.layers.max_pooling2d(
            inputs=conv2_relu,
            pool_size=[2, 2],
            strides=2
        )
        if log==True:
            print('[LOG:pool2]: ' + str(pool2.shape))

        # create a variable with the pool2 size because I need it to calculate the pool2_flat size
        x = tf.TensorShape.as_list(pool2.shape)

    # REDENSIFY POOL2 TO REDUCE COMPUTATIONAL LOAD
    with tf.name_scope('Reshape'):
        pool2_flat = tf.reshape(pool2, [-1, x[1] * x[2] * x[3]])
        if log==True:
            print('[LOG:pool2_flat]: ' + str(pool2_flat.shape))

    # DENSE LAYER
    with tf.name_scope('Dense_layer'):
        dense = tf.layers.dense(
            inputs=pool2_flat,
            units=1024,
        )
        if log==True:
            print('[LOG:dense]: ' + str(dense.shape))

        # apply the relu function
        dense_relu = tf.nn.relu(dense)
        if log==True:
            print('[LOG:dense_relu]: ' + str(dense_relu.shape))

    # add the dropout function
    with tf.name_scope('Dropout'):
        dropout = tf.layers.dropout(
            inputs=dense_relu,
            rate=0.4,
            training=MODE == tf.estimator.ModeKeys.TRAIN
        )
        if log==True:
            print('[LOG:dropout]: ' + str(dropout.shape))

    # LOGIT LAYER
    with tf.name_scope('Logit_layer'):
        logits = tf.layers.dense(
            inputs=dropout,
            units=2
        )
        if log==True:
            print('[LOG:logits]: ' + str(logits.shape))

    return logits

这是主程序

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function


# IMPORTS
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import os
import sys
from tqdm import tqdm
import load_dataset
import datetime
import time
get_images = load_dataset.get_images
next_batch = load_dataset.next_batch

import cnn_model_fn
cnn_model_fn = cnn_model_fn.cnn_model_fn

os.system('clear')

local_path = os.getcwd()
save_path = local_path + '/.Checkpoints/model.ckpt'
TensorBoard_path = local_path + "/.TensorBoard"
dataset_path = local_path + '/DATASET/'

#Training Parameters
learning_rate = 0.001
batch_size = 5
epochs = 2

MODE = 'TRAIN'

len_X, X, Y = get_images(
    files_path=dataset_path,
    img_size_h=1000,
    img_size_w=48,
    mode='TRAIN',
    randomize=True
)

X_batch, Y_batch = next_batch(
    total=len_X,
    images=X,
    labels=Y,
    batch_size=batch_size,
    index=0
)

logits = cnn_model_fn(X_batch, MODE)
prediction = tf.nn.softmax(logits)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=Y_batch))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(loss)
correct_predict = tf.equal(tf.argmax(prediction, 1), tf.argmax(Y_batch, 1))
accuracy = tf.reduce_mean(tf.cast(correct_predict, tf.float32))

init = tf.global_variables_initializer()
best_acc=0

with tf.Session() as sess:

    sess.run(init)
    saver = tf.train.Saver()

    if MODE == 'TRAIN':
        os.system('clear')
        print("TRAINING MODE")
        print('\n[epoch, iter]\t\tAccuracy\tProgress\tTime')

        for step in range(1, epochs+1):
            for i in range(0, int(len_X/batch_size)+1):
                t0 = time.time()

                X_batch, Y_batch = next_batch(
                    total=len_X,
                    images=X,
                    labels=Y,
                    batch_size=batch_size,
                    index=i
                )

                sess.run(train_op)
                los, acc= sess.run([loss, accuracy])

                t1 = time.time()
                t = t1-t0

                check = '[ ]'
                if acc >= best_acc:
                    check = '[X]'
                    best_acc = acc
                    print('[e:' + str(step) + ', i:' + str(i) + ']\t\t' + '%.4f' % acc + '\t\t' + check + '\t\t' + '%.3f' % t + 's')
                    saver.save(sess,save_path)
                else:
                    print('[e:' + str(step) + ', i:' + str(i) + ']\t\t' + '%.4f' % acc + '\t\t' + check + '\t\t' + '%.3f' % t + 's')

        writer = tf.summary.FileWriter(TensorBoard_path, sess.graph)

    elif MODE=='TEST':
        os.system('clear')
        print("TESTING MODE")
        saver.restore(sess, save_path)
        # here I need to test the model 


sess.close()

非常感谢您的帮助和时间.

Thank you so much for your help and your time.

我解决了这个问题

saver.restore(sess, save_path)
print("Initialization Complete")

len_X_test, X_test, Y_test = get_images(
    files_path=dataset_path,
    img_size_h=img_size_h,
    img_size_w=img_size_w,
    mode='TEST',
    randomize=True
)

train_feed = {x: X_test, y: Y_test}

print("Testing Accuracy:"+str(sess.run(accuracy, feed_dict=train_feed)))

推荐答案

我解决了这个问题:

saver.restore(sess, save_path)
print("Initialization Complete")

len_X_test, X_test, Y_test = get_images(
    files_path=dataset_path,
    img_size_h=img_size_h,
    img_size_w=img_size_w,
    mode='TEST',
    randomize=True
)

train_feed = {x: X_test, y: Y_test}

# test the model
print("Testing Accuracy:"+str(sess.run(accuracy, feed_dict=train_feed)))

这篇关于训练后测试Tensorflow CNN模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆