龙空技术网

深度学习入门初探——损失函数均方误差

chenleiyfk 225

前言:

今天我们对“python 均方误差”都比较关怀,大家都想要学习一些“python 均方误差”的相关内容。那么小编同时在网络上搜集了一些关于“python 均方误差””的相关资讯,希望同学们能喜欢,同学们一起来了解一下吧!

前文已经介绍了损失函数的目的是做什么了的:

深度学习入门初探——引出损失函数

这里呢,先来学习下均方误差这个损失函数是怎么计算的:

maen squared error

y表示测试数据经过预测得到的结果,t表示测试数据的正确结果,k表示数据的维度。下面是python实现的代码:

def maen_squared_error(r1, r2):    return 0.5*np.sum((r1-r2)**2)

为了更好地学习这个损失函数的指标性质,在这里拿深度学习入门初探——hello word式的手写数字识别中的数据做个演示:很明显可以看出那个数据吻合的更好。

# coding: utf-8import sys, ossys.path.append(os.pardir)import numpy as npimport picklefrom common.functions import sigmoid, softmaxdef _change_one_hot_label(X):    T = np.zeros((X.size, 10))    for idx, row in enumerate(T):        row[X[idx]] = 1    return T    def load_mnist(normalize=True, flatten=True, one_hot_label=False):    """读入MNIST数据集        Parameters    ----------    normalize : 将图像的像素值正规化为0.0~1.0    one_hot_label :         one_hot_label为True的情况下,标签作为one-hot数组返回        one-hot数组是指[0,0,1,0,0,0,0,0,0,0]这样的数组    flatten : 是否将图像展开为一维数组        Returns    -------    (训练图像, 训练标签), (测试图像, 测试标签)    """            with open("mnist.pkl", 'rb') as f:        dataset = pickle.load(f)        if normalize:        for key in ('train_img', 'test_img'):            dataset[key] = dataset[key].astype(np.float32)            dataset[key] /= 255.0                if one_hot_label:        dataset['train_label'] = _change_one_hot_label(dataset['train_label'])        dataset['test_label'] = _change_one_hot_label(dataset['test_label'])        if not flatten:         for key in ('train_img', 'test_img'):            dataset[key] = dataset[key].reshape(-1, 1, 28, 28)    return (dataset['train_img'], dataset['train_label']), (dataset['test_img'], dataset['test_label']) def get_data():    (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=True)    return x_test, t_testdef init_network():    with open("sample_weight.pkl", 'rb') as f:        network = pickle.load(f)    return networkdef predict(network, x):    W1, W2, W3 = network['W1'], network['W2'], network['W3']    b1, b2, b3 = network['b1'], network['b2'], network['b3']    a1 = np.dot(x, W1) + b1    z1 = sigmoid(a1)    a2 = np.dot(z1, W2) + b2    z2 = sigmoid(a2)    a3 = np.dot(z2, W3) + b3    y = softmax(a3)    return ydef maen_squared_error(r1, r2):    return 0.5*np.sum((r1-r2)**2)np.set_printoptions(formatter={'float': '{: 0.9f}'.format})network = init_network()x, t = get_data()y = predict(network, x[10])print("\n数据10预测的输出:\n",y, "\n")print("数据10实际的结果:\n",t[10], "\n")msr0 = maen_squared_error(y, t[10])print("数据10预测输出与实际结果的均方误差:",msr0, "\n")y = predict(network, x[1])print("数据1预测的输出:\n",y, "\n")print("数据1实际的结果:\n",t[1], "\n")msr1 = maen_squared_error(y, t[1])print("数据0预测输出与实际结果的均方误差:",msr1, "\n")

标签: #python 均方误差