Caffe การดำเนินการระหว่างแบตช์

เนื่องจากฉันมีตัวแยกประเภทตามคะแนนแพตช์เดียว ฉันจึงต้องการรวมการคาดการณ์ที่เครือข่ายสร้างขึ้นสำหรับรูปภาพต่างๆ

จาก https://github.com/BVLC/caffe/blob/master/src/caffe/proto/caffe.proto, การลดขนาด ไม่รองรับการทำงานบนแกนที่แตกต่างจากแกนสุดท้าย นอกจากนี้ การดำเนินการรวมกลุ่มจะสร้างค่าเฉลี่ยของอินพุต แต่เห็นได้ชัดว่าไม่ต้องแตะกับแบตช์ทั้งหมด

ฉันได้ใช้เลเยอร์หลามแล้ว แต่นี่ไม่เร็วพอสำหรับการทดลองขนาดใหญ่

มีวิธี "รวม" หรือโดยทั่วไปคือทำงานบนแกนแรกด้วยเครื่องมือที่มีอยู่แล้วหรือไม่


person Lemm Ras    schedule 10.08.2016    source แหล่งที่มา


คำตอบ (2)


ใช่. คุณสามารถ. หากคุณมีการคาดการณ์ N x p x q x r blob ให้ใช้ Slice ครั้งแรก (SliceLayer) โดยสร้าง N blobs แต่ละรูปทรง 1 x p x q x r จากนั้นใช้ N blobs เหล่านี้เป็น N พื้นสำหรับเลเยอร์ eltwise (EltwiseLayer) เพื่อสร้างเลเยอร์เดียว สูงสุด.

person Autonomous    schedule 10.08.2016
comment
ฉันคิดเกี่ยวกับเรื่องนี้ แต่ปัญหาในกรณีของฉันคือ SliceLayer จะต้องมี blobs อันดับต้น ๆ มากเท่ากับแบตช์ (ถ้าฉันจำไม่ผิด) เนื่องจากฉันต้องการ blobs ยอดนิยม 100 ร้อยรายการ ฉันจึงพยายามหาวิธีแก้ปัญหาอื่น - person Lemm Ras; 11.08.2016
comment
คุณกังวลหรือไม่ว่า .prototxt ของคุณจะซับซ้อน หรือคุณกังวลเกี่ยวกับเวลาในการดำเนินการหรือไม่ หากเป็นอย่างหลัง (เวลา) คุณสามารถจับเวลาได้โดยไม่ต้องแบ่งเลเยอร์และด้วย เกี่ยวกับการเขียน prototxt โดยทั่วไปฉันใช้โค้ด Python เพื่อเขียน prototxt (ได้รับแรงบันดาลใจจาก รหัสนี้) นั่นทำให้การเขียน blobs ยอดนิยม 100 รายการเป็นเรื่องง่ายมาก ไม่เช่นนั้น ฉันไม่เห็นวิธีอื่นใดที่ใช้เลเยอร์ที่มีอยู่ แน่นอน คุณสามารถเขียนเลเยอร์ของคุณเองได้เสมอ ซึ่งรวม Slice และ Eltwise ไว้ด้วยกัน - person Autonomous; 11.08.2016
comment
ขอบคุณสำหรับคำตอบที่สมบูรณ์นี้ ฉันกังวลเรื่องเวลามากกว่า จะลองดูครับว่าต้องใช้งบเท่าไร - person Lemm Ras; 11.08.2016

หากการคาดการณ์ของคุณมีขนาด: N x c (สำหรับขนาดมินิแบทช์เป็น N และ c ช่อง) คุณสามารถแยกส่วนนี้เป็น c blobs ด้วยมิติ N คุณสามารถป้อนสิ่งเหล่านี้ลงในเลเยอร์ Reduction ได้

ตัวอย่างเช่น คุณต้องเขียนสิ่งต่อไปนี้เป็นเทมเพลต Jinja2:

layer {
  name: "pred-slice"
  type: "Slice"
  bottom: "pred"
{%- for num in range(10) %}
  top: "pred-{{ num }}-vector"
{%- endfor %}
  slice_param {
    slice_dim: 1
{%- for num in range(1, 10) %}
    slice_point: {{ num }}
{%- endfor %}
  }
  include {
    phase: TEST
  }
}

{%- for num in range(10) %}
layer {
  name: "pred-{{num}}"
  type: "Reduction"
  bottom: "pred-{{ num }}-vector"
  top: "pred-{{ num }}"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
{%- endfor %}

ซึ่งขยายไปถึง:

layer {
  name: "pred-slice"
  type: "Slice"
  bottom: "pred"
  top: "pred-0-vector"
  top: "pred-1-vector"
  top: "pred-2-vector"
  top: "pred-3-vector"
  top: "pred-4-vector"
  top: "pred-5-vector"
  top: "pred-6-vector"
  top: "pred-7-vector"
  top: "pred-8-vector"
  top: "pred-9-vector"
  slice_param {
    slice_dim: 1
    slice_point: 1
    slice_point: 2
    slice_point: 3
    slice_point: 4
    slice_point: 5
    slice_point: 6
    slice_point: 7
    slice_point: 8
    slice_point: 9
  }
  include {
    phase: TEST
  }
}
layer {
  name: "pred-0"
  type: "Reduction"
  bottom: "pred-0-vector"
  top: "pred-0"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-1"
  type: "Reduction"
  bottom: "pred-1-vector"
  top: "pred-1"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-2"
  type: "Reduction"
  bottom: "pred-2-vector"
  top: "pred-2"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-3"
  type: "Reduction"
  bottom: "pred-3-vector"
  top: "pred-3"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-4"
  type: "Reduction"
  bottom: "pred-4-vector"
  top: "pred-4"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-5"
  type: "Reduction"
  bottom: "pred-5-vector"
  top: "pred-5"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-6"
  type: "Reduction"
  bottom: "pred-6-vector"
  top: "pred-6"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-7"
  type: "Reduction"
  bottom: "pred-7-vector"
  top: "pred-7"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-8"
  type: "Reduction"
  bottom: "pred-8-vector"
  top: "pred-8"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
layer {
  name: "pred-9"
  type: "Reduction"
  bottom: "pred-9-vector"
  top: "pred-9"
  include {
    phase: TEST
  }
  reduction_param {
    operation: MEAN
  }
}
person Jonathan    schedule 09.11.2016