Caffe 학습 노트 1 Caffe 의 구조

6639 단어 caffe
Caffe 의 3 급 구조
원문 주소: Caffe 학습 노트 6 - Caffe 구조 간략 분석 (동기 화 알 수 있 음)
  • caffe 는 세 가지 차원 으로 나 뉜 다.
  • Blob: 기본 적 인 데이터 구조 로 학습 한 매개 변수 와 네트워크 전송 과정 에서 데 이 터 를 저장 하 는 클래스 입 니 다.
  • Layer: 네트워크 의 기본 단원 으로 각종 층 류 가 파생 되 었 다.이 부분 을 수정 한 사람들 은 주로 특징 표현 방향 을 연구 했다.
  • Net: 네트워크 의 구축 으로 Layer 가 파생 한 층 류 를 네트워크 로 조합 합 니 다.Solver: Net 의 구 해 입 니 다. 이 부분 을 수정 하 는 사람 은 주로 DL 의 구 해 방향 을 연구 할 것 입 니 다.


  • Blobs
    Blob 은 Caffe 의 기본 데이터 구조 로 CPU 와 GPU 간 동기 화 능력 을 갖 추고 있 으 며 4 차원 배열 (Num, Channel, Height, Width) 이다.
    Blob 데이터 차원 을 number N x channel K x height H x width W 로 설정 하고 Blob 는 row - major 에 저 장 됩 니 다. 따라서 (n, k, h, w) 위치 에 있 는 값 의 물리 적 위 치 는 (n * K + k) * H + h) * W + w 이 고 그 중에서 Number / N 은 batch size 입 니 다.
  • row - major 원문 주소: 행 벡터, 열 벡터, 행 주 순서 행렬, 열 주 순서 행렬 (row vector, column vector, row major - matrix, column - major matrix) 행렬 의 저장 방식 은 두 가지 가 있 는데 하 나 는 '행 주 순서 (row - major order) / 행 우선' 이 고 다른 하 나 는 '열 주 순서 (column - major order) / 열 우선' 이다.예 를 들 어 Direct3D 는 row - major 를 사용 하고 OpenGL 은 column - major 를 사용한다.저장 순 서 는 선형 대수 중의 행렬 이 선형 메모리 배열 에 어떻게 저장 되 는 지 설명 하고 d3d 는 모든 줄 을 배열 에 줄 별로 저장 하 며 opengl 은 모든 열 을 배열 의 모든 줄 에 저장 합 니 다.

  • Blob 는 data 와 diff (경사도) 를 동시에 저장 하고 data 나 diff 에 접근 하 는 두 가지 방법 이 있 습 니 다.
    const Dtype* cpu_data() const; //    
    Dtype* mutable_cpu_data();     //   

    Layer
    모든 Pooling, Convolve, apply nonlinearities (비 선형 변환, 예 를 들 어 ReLU 등) 등 작업 이 여기에서 이 루어 집 니 다.Layer 에서 input data 는 bottom 으로 output data 를 top 으로 표시 합 니 다.각 층 은 세 가지 조작 setup (Layer 초기 화), forward (정방 향 전도, input 에 따라 output 계산), backward (역방향 전도 계산, output 에 따라 input 의 경사도 계산) 를 정의 합 니 다.forward 와 backward 는 GPU 와 CPU 두 가지 버 전의 실현 이 있 습 니 다.
    레이 어 구성
  • Neuron Layer 류: neuron 에 정의layers. hpp 에서 파생 류 는 주로 요소 등급 의 연산 (예 를 들 어 Dropout 연산, 활성화 함수 ReLu, Sigmoid 등) 이 고 연산 은 모두 같은 주소 로 계산 합 니 다 (in - place coptation, 반환 값 은 원래 값 을 덮어 쓰 고 새로운 메모 리 를 차지 합 니 다).
  • LossLayer 류: loss 에 정의layers. hpp 에 서 는 파생 류 에 loss 가 발생 하고 이 층 만 loss 가 발생 할 수 있 습 니 다.
  • 데이터 층: data 에 정의layer. hpp 에서 네트워크 의 최 하층 으로서 주로 데이터 형식의 전환 을 실현 합 니 다.
  • 특징 표현 층 (내 가 나 눈 클래스): vision 에 정의layers. hpp 는 특징 표현 기능 을 실현 합 니 다. 더욱 구체 적 으로 볼 륨 작업, Pooling 작업 을 포함 하고 그들 은 기본적으로 새로운 메모리 점용 (Pooling 이 상대 적 으로 작 음) 을 발생 합 니 다.
  • 네트워크 연결 층 과 활성화 함수 (내 가 나 누 는 클래스): common 에 정의layers. hpp, Caffe 는 한 층 과 여러 층 의 연결 을 제공 하고 이 헤더 파일 에서 설명 합 니 다.여기에 자주 사용 되 는 전 연결 층 인 이 너 프로 덕 트 레이 어 류 도 포함 된다.

  • Layer 의 중요 멤버 함수
    Layer 내부 에서 데 이 터 는 주로 두 가지 전달 방식 이 있 는데 정방 향 전도 (Forward) 와 역방향 전도 (Backward) 가 있다.Forward 와 Backward 는 CPU 와 GPU (부분 적 으로) 두 가지 로 이 루어 진다.Cafe 의 모든 레이 어 는 이 두 가지 방법 으로 데 이 터 를 전달 해 야 합 니 다.
    virtual void Forward(const vector<Blob<Dtype>*> &bottom,
                         vector<Blob<Dtype>*> *top) = 0;
    virtual void Backward(const vector<Blob<Dtype>*> &top,
                          const vector<bool> &propagate_down, 
                          vector<Blob<Dtype>*> *bottom) = 0;

    Layer 류 에서 파생 된 층 류 는 이 두 개의 허 함 수 를 실현 함으로써 다양한 기능 의 층 류 를 만 들 었 다.Forward 는 bottom 에 따라 top 을 계산 하 는 과정 이 고 Backward 는 반대 (top 에 따라 bottom 을 계산) 입 니 다.Blob 를 포함 하 는 용기 (vector) 를 사 용 했 는 지 주의 하 십시오. 대부분의 Layer 에 게 입력 과 출력 은 각각 하나의 Layer 만 연결 되 어 있 지만 일부 Layer 에 대해 서 는 한 쌍 이상 의 상황 이 존재 합 니 다. 예 를 들 어 LossLayer 와 일부 연결 층 이 있 습 니 다.네트워크 구조 정의 파일 (*. proto) 에서 각 층 의 매개 변수 bottom 과 top 수 는 vector 의 요소 수 를 결정 합 니 다.
    layers {
      bottom: "decode1neuron"   //           Layer
      bottom: "flatdata"        //           Layer
      top: "l2_error"           //          Layer
      name: "loss"              //      
      type: EUCLIDEAN_LOSS //     
      loss_weight: 0
    }

    Net
    Net 은 일련의 Layer 로 구성 되 어 있 으 며, 용기 형식 으로 여러 Layer 를 질서 있 게 배치 하고, Layer 간 의 연결 은 하나의 텍스트 파일 로 설명 합 니 다.그 자체 가 실현 하 는 기능 은 주로 레이 어 를 초기 화하 고 Update () 의 인터페이스 (네트워크 매개 변수 업데이트) 를 제공 하 며 그 자체 가 매개 변 수 를 효과적으로 학습 할 수 없습니다.모델 초기 화 Net:: Init () 는 blob 와 layer 를 만 들 고 Layer:: SetUp 을 호출 합 니 다.이 과정 에서 Net 은 초기 화 프로 세 스 를 보고 합 니 다.이 곳 의 초기 화 는 장치 와 상 관 없 이 초기 화 후 Caffe:: set 를 통 해 이 루어 집 니 다.mode () 는 Caffe:: mode () 를 설정 하여 플랫폼 CPU 나 GPU 를 실행 할 것 을 선택 합 니 다. 결 과 는 같 습 니 다.
    vector<shared_ptr<Layer<Dtype> > > layers_;

    Solver
    이 유형 에는 Net 의 지침 이 포함 되 어 있 는데 주로 훈련 모델 파라미터 가 사용 하 는 최적화 알고리즘 을 실현 하고 파생 된 유형 은 전체 네트워크 를 훈련 할 수 있다.
    shared_ptr<Net<Dtype> > net_;

    서로 다른 모델 훈련 방법 은 과부하 함수 ComputeUpdateValue () 를 통 해 update 매개 변 수 를 계산 하 는 핵심 기능 을 실현 합 니 다.
    virtual void ComputeUpdateValue() = 0;

    마지막 으로 전체 네트워크 훈련 과정 (즉, 당신 이 Caff 훈련 모델 을 실행 하 는 것) 을 진행 할 때 실제 caffe. cpp 의 train () 함 수 를 실행 하고 있 습 니 다. 이 함 수 는 실제 적 으로 Solver 대상 을 예화 하고 초기 화 한 후에 Solver 의 Solve () 방법 을 호출 했 습 니 다.그리고 이 Solve () 함 수 는 주로 다음 두 함 수 를 반복 해서 실행 하 는 것 입 니 다. 바로 방금 소개 한 몇 개의 함수 입 니까?
    ComputeUpdateValue();
    net_->Update();

    좋은 웹페이지 즐겨찾기