# 神经网络的学习
# 从数据中学习
# 数据驱动
# 发现模式的时候考虑各种因素之后给出答案
# 避免人为干预,尝试从收集到的数据中发现答案,神经网络或深度学习则比以往的机器学习方法更能避免认为干预
# 特征量——从输入数据中准确提取本质数据(重要的数据)的转换器
# 常用的特征量SIFT,SURF,HOG使用这些特征量将图像转换为向量,然后对转换后的向量使用机器学习中的SVM,KNN等分类器进行学习
# 将图像转换为向量时使用的特征量仍是由人类设计的,对于不同的问题,必须使用合适的特征量(必须设计专门的特征量)才能得到好结果
#
# 深度学习有时也称为端到端机器学习(end-to-end machine learning) 这里的端到端是从一端到另一端,从原始数据(输入)中获取目标结果(输出)
# 神经网络的优点是对所有的问题都可以用同样的流程解决,神经网络都是通过不断的学习所提供的数据,尝试发现待求解的问题的模式,神经网络可以将数据直接作为原始数据进行端到端的学习
# 训练数据和测试数据
# 使用训练数据进行学习,寻找最优的参数
# 使用测试数据评价训练得到的模型的实际能力
# 追求模型的泛化能力,正确评价模型的泛化能力,训练数据也称为监督数据
# @泛化能力是指处理未被观察过的数据(不包含在训练数据中的数据)的能力,泛化能力是机器学习的目标
# 损失函数
# @损失函数是表示神经网络性能的恶劣程度的指标,当前神经网络对监督数据在多大程度上不拟合,在多大程度上不一致
# 如果给损失函数乘上一个负值,就可以解释为在多大程度上不坏,即性能有多好
#
# @均方误差
# 计算神经网络的输出和正确解监督数据的各个元素之差的平方,再求总和
#
# @交叉熵误差
# 值是由正确解标签所对应的输出结果所决定的
#
#
#
import sys
import os
sys.path.append(os.pardir)
from dataset.mnist import load_mnist
import numpy as np
# 均方误差函数
def mean_squared_error(i, j):
return 0.5 * np.sum((i - j) ** 2)
# 均方误差例子
x = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
z = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
print(mean_squared_error(np.array(z), np.array(x)))
# 均方误差函数
def cross_entropy_error(k, o):
delta = 1e-7 # 当出现np.log(0)时,np.log(0)会变为负无穷大的-inf,导致后续计算无法进行
return -np.sum(o * np.log(k + delta)) #
# 交叉熵误差例子
print(cross_entropy_error(np.array(z), np.array(x)))
# 均方误差例子
z = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
print(mean_squared_error(np.array(z), np.array(x)))
# 交叉熵误差例子
print(cross_entropy_error(np.array(z), np.array(x)))
######################## mini-batch(小批量)学习 ##############################################
# 从全部数据中选出一小部分作为全部数据的近似,选择一小批数据进行小批量的学习
# 从训练数据中随机选择指定个数的数据的代码进行-mini-batch学习
# 加载mnist 数据集-读取数据过程
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True,
one_hot_label=True) # one_hot_label=Ture 可以得到one-hot-正确解标签为1 其他为0的数据结构
print(x_train.shape) # 输入数据的维度
print(t_train.shape) # 监督数据的维度
# np.random.choice() 可以从指定的数字中随机选择想要的数字
print(np.random.choice(60000, 10)) # 从0-59999之间随机选择十个数字
train_size = x_train.shape[0]
batch_size = 10
batch_mask = np.random.choice(train_size, batch_size)
x_batch = x_train[batch_mask]
print(x_batch)
t_batch = t_train[batch_mask]
print(t_batch)
# mini=batch 版交叉熵误差函数
def mini_batch_cross_entropy_error(o, k):
if o.ndim == 1:
k = k.reshape(1, k.size)
o = o.reshape(1, o.size)
b_size = o.shape[0]
return -np.sum(k * np.log(o + 1e-7)) / b_size
神经网络的学习 Python
最新推荐文章于 2024-08-08 14:28:23 发布