神经网络在每次训练后都会“3”

2024-09-29 21:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个用于手写数字检测的神经网络。在这个时候,我只训练了大约200个数字,我从互联网上下来,并处理成黑色或白色(1或0)。你知道吗

当我用其中的10幅图像训练神经网络,对所有的200幅图像进行测试时,我得到了61.5%的准确率,但是如果我用所有的200幅图像进行测试,我得到了10%的准确率,因为它对所有图像都猜测3。为什么会这样。我试过改变图层的大小,但没用。我想我的神经网络逻辑有错误

def sigmoid(z):
    return 1/(1+np.exp(-z))

def sigmoidd(z):
    return z*(1-z)


def train(x, y, iterations = 1000):
    synoptic_weights1 = 2*np.random.random((400,12)) -1
    synoptic_weights2 = 2*np.random.random((12,12)) - 1
    synoptic_weights3 = 2*np.random.random((12,10)) - 1



    #print(synoptic_weights)

    for i in range(1000):

        hidden_layer_1 = sigmoid(np.dot(x, synoptic_weights1))

        hidden_layer_2 = sigmoid(np.dot(hidden_layer_1, synoptic_weights2))

        outputs = sigmoid(np.dot(hidden_layer_2, synoptic_weights3))
        #print(outputs)
        #print(answers)

        output_error = y-outputs

        output_delta = output_error*sigmoidd(outputs)

        hidden_error2 = output_delta.dot(synoptic_weights3.T)

        hidden_delta2 = hidden_error2 * sigmoidd(hidden_layer_2)

        hidden_error1 = hidden_delta2.dot(synoptic_weights2.T)

        hidden_delta1 = hidden_error1 * sigmoidd(hidden_layer_1)        
        synoptic_weights3 += hidden_layer_2.T.dot(output_delta)
        synoptic_weights2 += hidden_layer_1.T.dot(hidden_delta2)
        synoptic_weights1 += x.T.dot(hidden_delta1)


    return synoptic_weights1, synoptic_weights2, synoptic_weights3

我希望在测试时,所有的200张图片都能达到相当的准确度,而不是10%


Tags: 图像layeroutputnp神经网络randomoutputsdot

热门问题