栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

深度学习入门-(基于python的理论和实现)11

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深度学习入门-(基于python的理论和实现)11

卷积层的实现,加一点个人理解

'''
卷积
激活
池化
全连接
激活
全连接
softmax
'''


import numpy as np
class SimpleConvNet:
    def __init__(self,input_dim=(1,28,28),
                 conv_param={'filter_num':30,
                             'filter_size':5,
                             'pad':0,
                             'stride':1},
                 hidden_size = 100,
                 output_size = 10,weight_init_std=0.01):
        filter_num = conv_param['filter_num']
        filter_size = conv_param['filter_size']
        filter_pad = conv_param['pad']
        filter_stride = conv_param['stride']
        input_size = input_dim[1]
        conv_output_size = (input_size - filter_size + 2*filter_pad)/filter_stride + 1
        pool_output_size = int(filter_num *(conv_output_size/2)*(conv_output_size/2))# 这里写的不够灵活,默认池化窗口是2*2的     
        #书上是池化的结果变成二维的,这里呢没有变成二维,反而对下面设置self.params['W2'] 的形状 方便了
        #其实卷积核,也算是权重W,只不过他们的运算方式不太一样

        self.params={}

        # W1 b1 (第一层)负责卷积
        self.params['W1'] =  weight_init_std * np.random.randn(filter_num,input_dim[0],filter_size,filter_size)
        # 卷积核数目,通道数,卷积核长,宽。
        self.params['b1'] = np.zeros(filter_num)
        #卷积之后的结果是 1 * pool_output_size

        #2,3层是全连接层
        #然后 第二层的W 的形状是 pool_output_size * hidden_size
        self.params['W2'] = weight_init_std * np.random.randn(pool_output_size,hidden_size)
        self.params['b2'] = np.zeros(hidden_size)
        #经过第二层之后的数据 的 形状是:1 * hidden_size
        #第三层W 的形状是hidden_size * output_size
        self.params['W3'] = weight_init_std * np.random.randn(hidden_size,output_size)
        self.params['b3'] = np.zeros(output_size)
        #经过第三层之后的数据是: 1 * output_size

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293747.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号