深度学习属于端到端的学习,从原始数据(输入)中获得目标结果(输出)的意思。
神经网络的优点是对所有的问题都可以用同样的流程来解决。
比如,不管要求解的问题是识别5,还是识别狗,抑或是识别人脸,神经网络都是通
过不断地学习所提供的数据,尝试发现待求解的问题的模式。
也就是说,与待处理的问题无关,神经网络可以将数据直接作为原始数据,进行“端对端”
的学习。
神经网络的学习所用指标是损失函数。两种常用的损失函数:
均方误差:
y是神经网络输出,t是监督数据
import numpy as np
def mean_squared_error(y,t):'''y is the output value,and the t is real value'''return 0.5 * np.sum((y-t)**2)
交叉熵误差:
交叉熵误差的值是由正确解标签所对应的输出结果决定的,正确解标签对应的输出越大,值越接近0
def cross_entropy_error(y,t):delta = 1e-7return -np.sum(t * np.log(y+delta))
函数内部在计算 np.log 时,加上了一个微小值 delta 。这是因为,当出现 np.log(0) 时, np.log(0) 会变为负无限大的 -inf ,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值可以防止负无限大的发生
训练集所有损失函数的和
神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习,称为mini-batch学习
import os,sys
sys.path.append(os.pardir)
from dataset.mnist import load_mnist(x_train, t_train),(x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)x_train.shape
t_train.shape
x_test.shape
t_test.shapetrain_size = x_train.shape[0]
batch_size = 10
batch_mask = np.random.choice(train_size, batch_size) #np.random.choice(60000, 10) 会从0到59999之间随机选择10个数字
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]