我试图解决二进制分类任务 . 我有一个20,000 X 50的0和1的矩阵,每张图片20,000张图片是4392的维度向量,在此过程中我将重塑为61 * 72并通过网络 . 在我通过网络传递图像后,我想为每个图像获得50个零和1的维度向量,然后在预测结果与我加载的真实值之间进行比较 . 我有一个卷积神经网络,我使用这个例子 Build :https://pythonprogramming.net/cnn-tensorflow-convolutional-nerual-network-machine-learning-tutorial/?completed=/convolutional-neural-network-cnn-machine-learning-tutorial//
我有用于训练和测试的图像数据集(通常80%用于训练,20%用于测试) .
但是当我运行代码时,我的训练准确性和失败不会改变以匹配并在整个过程中保持相同的值 .
我试图改变我的代码中的几个参数,包括数据大小,学习率(0.001,0.1,0.01,0.0001),层数(2,3,4,5),并尝试了几个成本函数和精度计算,但它根本没有帮助 . 这是我的代码:

from future import absolute_import
    from future import division
    from future import print_function
    import csv 
    import time
    import os
    import urllib 

import numpy as np
import tensorflow as tf
start_time = time.time()


data_in = np.transpose(np.loadtxt(open("20k_IMAGES.csv"), delimiter=","))
ones_zeros= np.loadtxt(open("activations20k.csv"), delimiter=",")
print("--- %s seconds ---" % (time.time() - start_time))

epochs=10
learning_rate=0.001
batch_size=200
n_classes=50
height=61
width=72
channels=1
n_inputs=height*width

train_X=data_in[0:16000,:]     #training set (images) (8000,4392)
test_X=data_in[16000:20000,:]   # test se (images)   (2000,4392)
train_Y=ones_zeros[0:16000,:]    #training set (labels) (8000,50)
test_Y=ones_zeros[16000:20000,:]  #test set (labels)    (2000,50)

n = train_X.shape[1] #4392
m = train_X.shape[0]
d = train_Y.shape[1] #50
k= train_Y.shape[0]
l = test_X.shape[0] #2000

x = tf.placeholder(tf.float32, shape=[None, n_inputs], name="X")

trainY = tf.placeholder(tf.float32, shape=[None,n_classes], name="trainY")
testY= tf.placeholder(tf.int32, shape=[l,d], name="testY")
testX= tf.placeholder(tf.int32, shape=[l,n], name="testX")

keep_rate = 0.8
keep_prob = tf.placeholder(tf.float32) #try to remove it


def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def maxpool2d(x):
    #                        size of window         movement of window
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')


def convolutional_neural_network(x):
    weights = {'W_conv1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
               'W_conv2': tf.Variable(tf.random_normal([5, 5, 32, 64])),
               'W_conv3': tf.Variable(tf.random_normal([5, 5, 64, 128])),
               'W_conv4': tf.Variable(tf.random_normal([5, 5, 128, 256])),
               'W_conv5': tf.Variable(tf.random_normal([5, 5, 256, 512])),
               'W_fc': tf.Variable(tf.random_normal([2 * 3 * 512, 1024])), #check if 15 or 16
               'out': tf.Variable(tf.random_normal([1024, n_classes]))}

    biases = {'b_conv1': tf.Variable(tf.random_normal([32])),
              'b_conv2': tf.Variable(tf.random_normal([64])),
              'b_conv3':tf.Variable(tf.random_normal([128])),
              'b_conv4': tf.Variable(tf.random_normal([256])),
              'b_conv5': tf.Variable(tf.random_normal([512])),
              'b_fc': tf.Variable(tf.random_normal([1024])),
              'out': tf.Variable(tf.random_normal([n_classes]))}

    x = tf.reshape(x, shape=[-1, 61, 72, 1])

    conv1 = tf.nn.relu(conv2d(x, weights['W_conv1']) + biases['b_conv1'])
    conv1 = maxpool2d(conv1)

    conv2 = tf.nn.relu(conv2d(conv1, weights['W_conv2']) + biases['b_conv2'])
    conv2 = maxpool2d(conv2)

    conv3 = tf.nn.relu(conv2d(conv2, weights['W_conv3']) + biases['b_conv3'])
    conv3 = maxpool2d(conv3)

    conv4 = tf.nn.relu(conv2d(conv3, weights['W_conv4']) + biases['b_conv4'])
    conv4 = maxpool2d(conv4)

    conv5 = tf.nn.relu(conv2d(conv4, weights['W_conv5']) + biases['b_conv5'])
    conv5 = maxpool2d(conv5)

    fc = tf.reshape(conv5, [-1, 2 * 3 * 512])
    fc = tf.nn.relu(tf.matmul(fc, weights['W_fc']) + biases['b_fc'])
    fc = tf.nn.dropout(fc, keep_rate)

    output = tf.matmul(fc, weights['out']) + biases['out']
    sig_output = tf.nn.sigmoid(output)

    return sig_output

def train_neural_network(x):
    prediction = convolutional_neural_network(x)

    #cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=prediction, labels=trainY))
    #cost= tf.reduce_mean(tf.losses.sigmoid_cross_entropy(multi_class_labels=trainY, logits=prediction))
    cost=tf.losses.absolute_difference(labels=trainY, predictions=prediction)
    #cost=tf.losses.log_loss(labels=trainY, predictions=prediction)
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)
    #optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
    # Here you check whether the index of the maximum value of the predicted image is equal to the actual labelled image. and both will be a column vector.
    correct_prediction = tf.equal(tf.argmax(prediction, 1), tf.argmax(trainY, 1))
    # calculate accuracy across all the given images and average them out.
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for epoch in range(epochs):
            for iteration in range(len(train_X) // batch_size):

                X_batch = train_X[iteration * batch_size:iteration * batch_size + batch_size,:]
                y_batch = train_Y[iteration * batch_size:iteration * batch_size + batch_size,:]

                sess.run(optimizer, feed_dict={x: X_batch , trainY: y_batch})
                train_loss=sess.run(cost, feed_dict={x: X_batch , trainY: y_batch})
                train_acc=sess.run(accuracy, feed_dict={x: X_batch , trainY: y_batch})
                preds_train = sess.run(prediction, feed_dict={x: X_batch, trainY: y_batch})
                print("Batch:", '%04d' % (batch_size * iteration), "iteration:", '%04d' % iteration, "Epoch",
                      '%04d' % (epoch + 1), "loss=","{:.6f}".format(train_loss), ",training accuracy=", "{:.6f}".format(train_acc))  # ,"probabilities:",predictions)
                #print("train predictions:", preds_train)
        print("Optimization Finished!")


        valid_loss = sess.run([cost], feed_dict={x: test_X, trainY: test_Y}) #change trainY to y in test and training
        print("validation loss:", valid_loss)
        test_acc = sess.run([accuracy], feed_dict={x: test_X, trainY: test_Y})#change trainY to y in test and training
        print("Testing Accuracy:",test_acc)
        preds_test=sess.run(prediction, feed_dict={x: test_X, trainY: test_Y})
        print("test predictions:", preds_test)
        #pred = open('predictions.csv', 'w')
        np.savetxt("prediction4k_of20k.csv", preds_test, delimiter=",")
        np.savetxt("test_Y4k_of_20k.csv", test_Y, delimiter=",")

    train_neural_network(x)


    print("--- %s seconds ---" % (time.time() - start_time))

还有什么我可以做的来改善我的代码,以便它可以正常工作?要解决这个问题?
谢谢您的帮助!!