训练后如何在测试集上保存和测试 CNN 模型

数据挖掘 机器学习 神经网络 深度学习 张量流 美国有线电视新闻网
2022-02-24 04:19:17

我的 CNN 模型在训练集上进行了训练并在验证集上进行了验证,现在我想在测试集上对其进行测试,这是我的代码:

x_img = tf.placeholder(tf.float32, name='x_img')
y_label = tf.placeholder(tf.float32, name='y_label')
reshape = tf.reshape(x_img, shape=[-1, img_x, img_y, img_z, 1], name='reshape')

def CNN_Model(input):    
    conv1 = conv_layer(reshape, num_channels, n_f_conv1, name="conv1")    
    max_pool1 = maxpool_layer(conv1, name="max_pool1")    
    conv2 = conv_layer(max_pool1, n_f_conv1, n_f_conv2, name="conv2")  
    max_pool2 = maxpool_layer(conv2, name="max_pool2")
    shape = 4*4*4*64
    flattened = tf.reshape(max_pool2,shape=[-1, shape], name='flattened')
    fc = fc_layer(flattened, shape, n_node_fc, name="fc")
    dropout1 = dropout(fc, keep_rate, name="dropout1")
    output_layer = output(dropout1, n_node_fc, num_classes, name="output_layer") 
    return output_layer

def train_CNN(input):
    train_predict = CNN_Model(x_img)
    with tf.variable_scope("cross_entropy", reuse=tf.AUTO_REUSE):
        lose = tf.nn.softmax_cross_entropy_with_logits_v2(logits=train_predict, labels=y_label, name='cross_entropy')
        cost = tf.reduce_mean(lose, name='reduce_mean_cost')
        tf.summary.scalar("cost", cost)

    with tf.variable_scope("optimization", reuse=tf.AUTO_REUSE):
        optimizer = tf.train.AdamOptimizer(learning_rate, name='AdamOptimizer').minimize(cost)

    init = tf.global_variables_initializer()
    print("Starting session...")
    with tf.Session() as sess:
        sess.run(init)
        all_time = 0
        batch_size = 120
        batch = 0
        print("Starting training...")
        for epoch in range(num_epochs):
            train_batch = train_data[batch:batch_size]
            batch += batch_size
            batch_size += batch_size
            start_time = time.time()
            ep_loss = 0
            for data in train_batch:
                X = data[0]
                Y = data[1]
                _, c = sess.run([optimizer, cost], feed_dict={x_img: X, y_label: Y})
                ep_loss += c
            end_time = time.time()
            all_time += int(end_time-start_time)
            print('Epoch', epoch+1, 'completed out of',num_epochs,'loss:',ep_loss, 
                  'time usage: '+str(int(end_time-start_time))+' seconds')


        correct_predict = tf.equal(tf.argmax(train_predict, 1), tf.argmax(y_label, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_predict, tf.float32), name='reduce_mean_acc')
        print("Validation accuracy:", accuracy.eval({x_img:[i[0] for i in validate_data], 
                                               y_label:[i[1] for i in validate_data]}))
        print("Test accuracy:", accuracy.eval({x_img:[i[0] for i in test_data], 
                                               y_label:[i[1] for i in test_data]}))

我有一个test_datatrain_data上面代码一样存储的测试数据集,尝试以多种方式进行,但我没有成功,任何人都可以与我分享测试代码,当然是基于我的代码?

1个回答

我不确切知道您的问题在哪里,但根据评论,请查看以下行。

_, c = sess.run([optimizer, cost], feed_dict={x_img: X, y_label: Y})

feed_dict用于将数据传递到您的网络。如您所见,X是训练数据。您可以将其替换为测试数据。您还应该将 更改y_labels为测试数据的标签。