zoukankan      html  css  js  c++  java
  • cnn.py cs231n

    n

    import numpy as np
    
    from cs231n.layers import *
    from cs231n.fast_layers import *
    from cs231n.layer_utils import *
    
    
    class ThreeLayerConvNet(object):
      """
      A three-layer convolutional network with the following architecture:
      
      conv - relu - 2x2 max pool - affine - relu - affine - softmax
      
      The network operates on minibatches of data that have shape (N, C, H, W)
      consisting of N images, each with height H and width W and with C input
      channels.
      """
      
      def __init__(self, input_dim=(3, 32, 32), num_filters=32, filter_size=7,
                   hidden_dim=100, num_classes=10, weight_scale=1e-3, reg=0.0,
                   dtype=np.float32):
        """
        Initialize a new network.
        
        Inputs:
        - input_dim: Tuple (C, H, W) giving size of input data
        - num_filters: Number of filters to use in the convolutional layer
        - filter_size: Size of filters to use in the convolutional layer
        - hidden_dim: Number of units to use in the fully-connected hidden layer
        - num_classes: Number of scores to produce from the final affine layer.
        - weight_scale: Scalar giving standard deviation for random initialization
          of weights.
        - reg: Scalar giving L2 regularization strength
        - dtype: numpy datatype to use for computation.
        """
        C,H,W=input_dim
        
        self.params = {}
        self.reg = reg
        self.dtype = dtype
        self.params['W1']=np.random.randn(num_filters,C,filter_size,filter_size)*weight_scale
        self.params['b1']=np.zeros(num_filters,)
        self.params['W2']=np.random.randn(num_filters*H*W/4,hidden_dim)*weight_scale
        self.params['b2']=np.zeros(hidden_dim,)
        self.params['W3']=np.random.randn(hidden_dim,num_classes)*weight_scale
        self.params['b3']=np.zeros(num_classes,)
        # why randn needs int while seros needs tuple!!!!
        for k, v in self.params.iteritems():
          self.params[k] = v.astype(dtype)
         
     
      def loss(self, X, y=None):
        """
        Evaluate loss and gradient for the three-layer convolutional network.
        
        Input / output: Same API as TwoLayerNet in fc_net.py.
        """
        W1, b1 = self.params['W1'], self.params['b1']
        W2, b2 = self.params['W2'], self.params['b2']
        W3, b3 = self.params['W3'], self.params['b3']
        
        # pass conv_param to the forward pass for the convolutional layer
        filter_size = W1.shape[2]
        conv_param = {'stride': 1, 'pad': (filter_size - 1) / 2}
    
        # pass pool_param to the forward pass for the max-pooling layer
        pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}
    
        scores = None
    out1,cache1=conv_relu_pool_forward(X,W1,b1,conv_param,pool_param) out=out1.reshape(out1.shape[0],-1) out,cache2=affine_relu_forward(out,W2,b2) scores,cache3=affine_forward(out,W3,b3) if y is None: return scores loss, grads = 0, {}
    loss,dout=softmax_loss(scores,y) loss+=self.reg*0.5*np.sum(W3**2) loss+=self.reg*0.5*np.sum(W2**2) loss+=self.reg*0.5*np.sum(W1**2) dout,grads['W3'],grads['b3']=affine_backward(dout,cache3) grads['W3']+=W3*self.reg dout,grads['W2'],grads['b2']=affine_relu_backward(dout,cache2) grads['W2']+=W2*self.reg dout=dout.reshape(*out1.shape) dout,grads['W1'],grads['b1']=conv_relu_pool_backward(dout,cache1) grads['W1']+=W1*self.reg ############################################################################ # END OF YOUR CODE # ############################################################################ return loss, grads pass

      

    n

  • 相关阅读:
    std 迭代器的几种用法
    Cocos2dx3.1+xcode +lua配置
    php获取文件创建时间、修改时间
    如何创建一个基于jquery的编辑器
    封装ajax,简单的模仿jquery提交
    如何实现SQL事务的提交,又不对外进行污染
    .net mvc结合微软提供的FormsAuthenticationTicket登陆
    Http GET、Post方式的请求总结
    post 报文请求接口方法
    zip格式压缩、解压缩(C#)
  • 原文地址:https://www.cnblogs.com/sfzyk/p/6732831.html
Copyright © 2011-2022 走看看