深度学习笔记:神经网络(3)

该神经网络输入层有784个神经元(来源于展开图像28 * 28),输出层有10个神经元(代表结果0-10),其中隐藏层我们使用两层,第一层50个神经元,第二次100个神经元。在我们上一个例子中,我们一次处理一张展开的图像,相当于处理一个长为784 (28 X 28)的一维数组,数组在神经网络中形状变化如下。将x代入我们上一篇文章中搭建的神经网络里得到以下结果,输出可以被解释为x[0]的概率是0.36,x[1]的概率是0.63。在实际应用中,由于e ^ x 的值往往较大,容易导致变量溢出。
摘要由CSDN通过智能技术生成

关于本章之前内容可以参考以下之前文章:

1 https://blog.csdn.net/Raine_Yang/article/details/128473486?spm=1001.2014.3001.5501

2 https://blog.csdn.net/Raine_Yang/article/details/128584916?spm=1001.2014.3001.5501

神经网络的输出层设计

机器学习问题一般分为分类问题和回归问题。分类文件判断数据属于哪一类别,输出层一般使用softmax函数。回归问题即根据输入预测一个连续的数值,输出层一般使用恒等函数

设有n个输出层,其中第k个神经元的输出值yk
softmax函数表达式:
在这里插入图片描述
在实际应用中,由于e ^ x 的值往往较大,容易导致变量溢出。利用以下简单变换可以很好避免这一问题:
在这里插入图片描述
这里我们将分数上下同乘以常数C,把ln©代入到指数函数内,最后把ln©即为C’。我们将C’取输入数据最大值即可很好避免溢出

程序实现如下:

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a - c)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y

2 softmax函数特征

softman函数输出是0到1之间实数,并且输出值总和恒为1。这一性质使得我们将softmax函数输出解释为分类问题各项的概率

network = init_network()
x = np.array([1.6, 5.5])
y = forward(network, x)
print(y)

# output: [0.36750414 0.63249586]

将x代入我们上一篇文章中搭建的神经网络里得到以下结果,输出可以被解释为x[0]的概率是0.36,x[1]的概率是0.63

输出层的神经元个数又问题而定,一般来说对于分类问题神经元个数即为类别的个数,而每个输出值即为对应类别的概率

3 手写数字识别

要实现首先数字识别,我们先引入常用的手写数字库mnist用于训练。运行下面程序前需要先将mnist库下载到该程序文件父文件夹下

# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import numpy as np
from dataset.mnist import load_mnist
from PIL import Image


def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)

img = x_train[0]
label = t_train[0]
print(label)  #
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值