Caffe 학습 노트 1 Caffe 의 구조
6639 단어 caffe
원문 주소: Caffe 학습 노트 6 - Caffe 구조 간략 분석 (동기 화 알 수 있 음)
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 입 니 다.
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 두 가지 버 전의 실현 이 있 습 니 다.
레이 어 구성
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();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
error: too few arguments in function call최근에 caffe가 오류를 보고했습니다. 제 cudnn 버전(cuDNN:ver.7.0.5)입니다. 그리고 caffe에서 cudnn 버전이 너무 낮아서 오류가 발생했습니다. 해결 방법: 장: 수정: 전재:https:/...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.