CS231n作业(四)全连接神经网络分类

一、作业说明

本文对应cs231n的用两层神经网络进行cifar10数据集的分类。

程序的源码已上传,也欢迎有需要的读者下载,地址为https://download.csdn.net/download/wjp_ctt/10766477

二、背景知识

关于全连接神经网络的详细知识,可以参见我的上一篇博客,cs231n神经网络,里面包含了神经网络的建立,梯度计算,正则化等基本知识

在我们的程序中,使用了dropout正则化技术,和Adam学习率自适应方法。

三、程序源码

首先构建神经网络的一层,存放在layer.py文件中。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov  4 12:52:25 2018

@author: wjp_ctt
"""

import numpy as np


#定义神经网络的一层
class LAYER(object):
    
    def __init__(self, input_dim, output_dim, data):
        
        """
        初始化神经网络的一层
        ---------------------------------------------------
        input_dim               :输入维度
        output_dim              : 输出维度
        data                    : 输入数据
        """
        self.input_dim          = input_dim
        self.output_dim         = output_dim
        self.input              = data 
        self.output             = np.zeros([data.shape[0], output_dim])
        self.u1                 = np.zeros_like(self.output)
        self.w                  = 0.01*np.random.rand(self.input_dim, self.output_dim)
        self.b                  = 0.01 * np.ones(output_dim)
        self.dw                 = np.zeros_like(self.w)
        self.db                 = np.zeros_like(self.b)
        self.dsdwh              = []
        self.dw_m               = np.zeros_like(self.w)
        self.dw_v               = np.zeros_like(self.w)
        self.db_m               = np.zeros_like(self.b)
        self.db_v               = np.zeros_like(self.b)
    
    def forward(self, training_mode, p):
        temp = np.dot(self.input, self.w)   
        temp += self.b
        temp[temp<=0]=0         #激活函数,使用ReLU
        #训练模式下使用dropout
        if training_mode:
            self.u1=(np.random.rand(*temp.shape)<p)/p
            temp *= self.u1
        self.output = temp

基于神经网络的一层,我们进行神经网络的叠加,可以得到多层神经网络。这段程序存放于layer.py中。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov  4 14:48:40 2018

@author: wjp_ctt
"""

import numpy as np
import layer
from matplotlib import pylab as plt

#定义神经网络
class NN(object):
    
    def __init__(self, num_layers, layer_size, data, labels, learning_rate, p, batch_size, iterations, k, beta1, beta2):
        """
        初始化神经网络
        num_layers                     :网络的层数
        layer_size                     ࿱
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值