深度学习01--Mnist手写体识别

纯记录自己在深度学习方面的学习历程--基于b站的人工智能许多up主的教学视频

  1. 定义一个多层感知机的类
    import numpy as np
    from utils.features import prepare_for_training
    from utils.hypothesis import sigmoid, sigmoid_gradient
    
    # 定义一个类,叫多层感知机--multilayer perceptron
    class MultilayerPerceptron:
        # 初始化,data--数据,label--标签,layers--神经网络层数,normalize_data--归一化
        def __init__(self, data, labels, layers, normalize_data=False):
            data_processed = prepare_for_training(data, normalize_data=normalize_data)[0]
            self.data = data_processed
            self.labels = labels
            self.layers = layers  # 预计三层 28*28*1=784 25 10
            self.normalize_data = normalize_data
            self.ws = MultilayerPerceptron.w_init(layers)  # 对权重参数的初始化
    
        # 训练模块 max--迭代次数,alpha--学习率
        def train(self, max=1000, alpha=0.1):
            unroll_ws = MultilayerPerceptron.unroll(self.ws)
            (optimized_ws, loss_history) = MultilayerPerceptron.gradient_descent(self.data, self.labels, self.layers,
                                                                                 unroll_ws, max, alpha)
            self.ws = MultilayerPerceptron.roll(optimized_ws, self.layers)
            return self.ws, loss_history
    
        # 测试
        def predict(self, data):
            data_processed = prepare_for_training(data, normalize_data=self.normalize_data)[0]
            num_examples = data_processed.shape[0]
            predictions = MultilayerPerceptron.forward(data_processed, self.layers, self.ws)
            return np.argmax(predictions, axis=1).reshape((num_examples, 1))
    
        # 对权重参数的初始化
        def w_init(layers):
            num_layers = len(layers)
            ws = {}
            # 实际循环两次,生成两个w矩阵:25*785 10*26
            for index in range(num_layers - 1):
                income = layers[index]
                outcome = layers[index + 1]
                # +1根据权重公式xw+b,考虑到b,例784*25+25=(784+1)*25
                ws[index] = np.random.rand(outcome, income + 1) * 0.05  # *0.05是使随机生成的值尽量小
            return ws
    
        # 将矩阵展开为一维向量
        def unroll(m
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值