机器学习深度学习基础笔记(2)——梯度下降之手写数字识别算法实现

实现一个手写数字识别的算法

1.训练数据

MNIST数据集:
训练集(train):50000——用于训练
验证集(validation):10000——用于训练中的自测
测试集(test):10000——用于测试

2.神经网络初始化

class Network(object):

    def __init__(self, sizes):

        self.num_layers = len(sizes)
        self.sizes = sizes
        self.biases = [np.random.randn(y, 1) for y in sizes[1:]]
        self.weights = [np.random.randn(y, x)
                        for x, y in zip(sizes[:-1], sizes[1:])]

解释:
init:只要实例化一个类,总要运行init,python的构造函数, 类似于Java里面类的构造函数。
self:索引到当前类,类似于java中的this
sizes:神经元有几层及每层个数,eg:net=Network([ 2, 3, 1])#第一层2个神经元,第二层3个,第三层1个
num_layers=len(sizes):神经网络层数
biases:偏移量初始化,0~1之间随机选取,一个神经元需要一个biases
weights:权重初始化,0~1之间随机选取,一个箭头对应一个权重
random:随机


为了便于理解此处单独运行如下代码:

sizes=[2,3,1]
bias=[np.random.randn(y, 1) for y in sizes[1:]]
print(bias)

运行结果:返回两个list,一个3×1和一个1×1的list。//np.random.randn(y, 1)可以理解为返回一个 y 行 1列 的list,list的值采用高斯分布随机赋值

[array([[-0.2310922 ],
       [-0.33350782],
       [ 0.88558646]]), array([[ 1.51042319]])]

Process finished with exit code 0

sizes[1:]:就是size中除了第一个数外的,后面所有的数
sizes[:-1]:就是size中除了最后一个数外的,前面所有的数
x, y in zip(sizes[:-1], sizes[1:])]:x,y分别取zip中的两个值,
net.weights[1]:存储连接第二层和第三层间的权重

  • 以下图为例,初始化一个如下图那样的神经网络,运行一下开头那部分代码:

这里写图片描述

import numpy as np

class Network(object):

    def __init__(self, sizes):
        self.num_layers = len(sizes)
        self.sizes = sizes
        self.biases = [np.random.randn(y, 1) for y in sizes[1:]]
        self.weights = [np.random.randn(y, x)
                        for x, y in zip(sizes[:-1], sizes[1:])]
net = Network([2,3,1])
print(net.num_layers)
print(net.sizes)
print("偏移量:")
print(net.biases)
print("权重:")
print(net.weights)

运行结果:

3
[2, 3, 1]
偏移量:
[array([[ 0.72072723],
       [ 1.02129651],
       [ 0.0451003 ]]), array([[ 0.89568534]])]
权重:
[array([[ 0.35048635,  1.582825  ],
       [-0.6184383 ,  1.03039687],
       [-1.22620262, -0.48511089]]), array([[ 1.51702976, -0.59924277,  0.07869854]])]

Process finished with exit code 0

3.前向传播

a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值