神经网络的学习 Python

#  神经网络的学习

#  从数据中学习
#       数据驱动
#          发现模式的时候考虑各种因素之后给出答案
#           避免人为干预,尝试从收集到的数据中发现答案,神经网络或深度学习则比以往的机器学习方法更能避免认为干预
#   特征量——从输入数据中准确提取本质数据(重要的数据)的转换器
#       常用的特征量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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P("Struggler") ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值