Cómo configurar la estructura de cada capa en Caffe
Acabo de instalar Caffe en mi computadora recientemente. Dado que hay diferentes estructuras de capas en la red neuronal y los diferentes tipos de capas tienen diferentes parámetros, seguí las instrucciones. en el sitio web de Caffe. El documento hace un breve resumen.
1. Capa visual
1.1 Capa de convolución
Tipo: CONVOLUCIÓN
Ejemplo
capas {< / p>
nombre: "conv1"
tipo: CONVOLUCIÓN
abajo: "datos"
arriba: "conv1"
blobs_lr: 1 # El multiplicador de la tasa de aprendizaje del filtro
blobs_lr: 2 # El multiplicador de la tasa de aprendizaje del sesgo
weight_decay: 1 # El multiplicador de caída de peso del filtro
p>
weight_decay: 0 # Multiplicador de caída de peso sesgado
convolution_param {
num_output: 96 # Aprende 96 filtros
kernel_size: 11 # Cada filtro es 11x11
zancada: 4 # Cada filtro se aplica a 4 píxeles de distancia
weight_filler {
tipo: "gaussiano" # Inicializa el filtro usando gaussiano distribución
std: 0.01 # stdev es la distribución de 0.01 (el promedio predeterminado es 0)
}
bias_filler {
tipo : "constante" # Inicializa el sesgo a cero (0)
valor: 0
}
}
}
blobs_lr: parámetro utilizado para ajustar la tasa de aprendizaje; en el ejemplo anterior, establezca la tasa de aprendizaje ponderada para que sea la misma que la tasa de aprendizaje proporcionada por el solucionador en ejecución, mientras establece la tasa de aprendizaje sesgado al doble del peso.
weight_decay:
Parámetros importantes de la capa convolucional
Parámetros requeridos:
num_output (c_o): el número de filtros
p>kernel_size (o kernel_h y kernel_w): tamaño del filtro
Parámetros opcionales:
weight_filler [tipo predeterminado: valor 'const': 0]: parámetro Método de inicialización
bias_filler: método de inicialización de Bias
bias_term [el valor predeterminado es verdadero]: especifica si se habilita el término de sesgo
pad (o pad_h y pad_w) [predeterminado 0 ]: Especifica cuántos píxeles agregar en cada lado del paso
de entrada (o stride_h y stride_w) [predeterminado 1]: Especifica el paso del grupo de filtro
(g) [predeterminado 1]: Si g gt; 1, limitamos la conectividad de cada filtro a un subconjunto de la entrada. Específicamente, los canales de entrada y salida se dividen en grupos g, y el canal del grupo de salida i-ésimo solo se conectará al canal del grupo de entrada i-ésimo.
Cambiar tamaño por convolución:
Entrada: n * c_i * h_i * w_i
Salida: n * c_o * h_o * w_o, donde h_o = ( h_i 2 * pad_h - kernel_h) /stride_h 1, w_o se calcula de la misma manera.
1.2 Pooling
Tipo: POOLING
Ejemplo
Capa {
nombre: "pool1" p>
tipo: POOLING
abajo: "conv1"
arriba: "pool1"
pooling_param {
pool: MAX
kernel._size: 3 # Agrupar dentro de una región de 3x3
zancada: 2 # Distribuir dos píxeles entre las regiones agrupadas (en el blob inferior)
p >
}
}
Parámetros importantes de la capa convolucional
Parámetros necesarios:
kernel_size (o kernel_h y kernel_w ) : tamaño del filtro
Parámetros opcionales:
pool [MAX predeterminado]: método de agrupación, actualmente hay tres métodos: MAX, AVE y STOCHASTIC
pad (o pad_h y pad_w) [predeterminado 0]: especifica cuántos píxeles agregar para cada entrada
zancada (o stride_h y stride_w) [predeterminado 1]: especifica el tamaño de paso del filtro
p>Cambiar tamaño agrupando:
Entrada: n * c_i * h_i * w_i
Salida: n * c_o * h_o * w_o, donde h_o = (h_i 2 * pad_h - kernel_h) /stride_h 1, w_o se calcula de la misma manera.
1.3 Normalización de respuesta local (LRN)
Tipo: LRN
La normalización de respuesta local es la normalización del área de entrada local (la activación a se pasa en Generado agregando un peso normalizado (parte denominador) a la nueva activación b), hay dos formas diferentes, una es que el área de entrada es un canal adyacente (LRN entre canales), la otra es un área espacial dentro del mismo canal (Intra-canal). canal LRN)
Calculado dividiendo cada entrada por
Parámetros opcionales:
local_size [predeterminado 5]: para LRN entre canales, es el número de canales adyacentes canales a sumar; para LRN intracanal, es la longitud lateral de la región espacial a sumar
alfa [valor predeterminado 1]: parámetro de escala
beta [valor predeterminado 5 ]: Índice
norm_region [Valor predeterminado ACROSS_CHANNELS]: seleccione el método LRN de ACROSS_CHANNELS o Within_CHANNEL
2 Capa de pérdida
La fuerza impulsora del aprendizaje profundo es. para minimizar la pérdida de resultados y objetivos.
2.1 Softmax
Tipo: SOFTMAX_LOSS
2.2 Suma de Cuadrados/Euclideano
Tipo: EUCLIDEAN_LOSS
2.3 Bisagra / Margen
Tipo: HINGE_LOSS
Ejemplo:
# L1 Norma
capas {
nombre: "pérdida"
tipo: HINGE_LOSS
bottom."pred"
bottom: "etiqueta"
}
# Norma L2
capas {
nombre."loss"
tipo: HINGE_LOSS
abajo: "pred" p>
abajo: "etiqueta"
arriba: "pérdida"
hinge_loss_param {
norma: L2
}
}
Parámetros opcionales:
norma [predeterminada L1]: seleccione norma L1 o L2
Entrada:
n * c * h * wPredicciones
n * 1 * 1Etiquetas
Salida
1 * 1 * 1Pérdida calculada
2.4 Sigma Entropía cruzada
Tipo: SIGMOID_CROSS_ENTROPY_LOSS
2.5 Infogain
Tipo: INFOGAIN_LOSS
2.6 Precisión y Top-k
Tipo: EXACTITUD
Tipo: Top-k: EXACTITUD
Se utiliza para calcular la exactitud de la salida y el objetivo, esto en realidad no es una PÉRDIDA y no hay paso atrás.
3. Capa de activación/capa de neuronas
En términos generales, la capa de activación opera elemento por elemento, con la entrada y la salida teniendo el mismo tamaño, generalmente no lineal. función.
3.1 ReLU / Rectificado-Lineal y Leaky-ReLU
Tipo: RELU
Ejemplo:
Capa{
nombre: "relu1"
tipo: RELU
abajo: "conv1"
arriba: "conv1"
}
Parámetros opcionales:
pendiente_negativa [predeterminado 0]: especifica la salida cuando el valor de entrada es menor que cero.
ReLU es actualmente la función de activación más utilizada, principalmente porque converge más rápido y mantiene el mismo efecto.
La función ReLU estándar es max(x, 0), y cuando x > 0, la salida general es x, pero cuando x > = 0, la salida es pendiente_negativa. La capa RELU admite el cálculo in situ, es decir, la salida inferior es la misma que la entrada para evitar el consumo de memoria.
3.2 Sigmoide
Tipo: SIGMOIDE
Ejemplo:
capa {
nombre: "encode1neuron"
abajo."encode1"
arriba: "encode1neuron"
tipo: SIGMOID
}
capa SIGMOID Calcule la salida para cada entrada x mediante sigmoide (x).
3.3 TanH / Tangente hiperbólica
Tipo: TANH
Ejemplo:
capas {
nombre: " encode1neuron"
abajo: "encode1"
arriba: "encode1neuron"
tipo: SIGMOID
}
< El La salida de cada entrada x de la capa p>TANH se calcula mediante tanh (x), y la función es la siguiente.3.3 Valor absoluto
Tipo: ABSVAL
Ejemplo:
capa {
nombre: "capa"
abajo."in"
arriba: "fuera"
tipo: ABSVAL
}
ABSVAL La capa calcula la salida para cada entrada x mediante abs(x).
3.4 Fuente de alimentación
tipo: POWER
Ejemplo:
capa {
nombre: "capa"
abajo: "dentro"
arriba: "fuera"
tipo: ENERGÍA
power_param {
potencia: 1
escala: 1
shift.0
}
}
Parámetros opcionales:
potencia [el valor predeterminado es 1]
escala [el valor predeterminado es 1]
cambio [el valor predeterminado es 0]
La capa de ENERGÍA pasa (cambio escala * x)^ POWER calcula la salida para cada entrada x.
3.5 BNLL
Tipo: BNLL
Ejemplo:
Capa{
nombre: "capa"
abajo: "dentro"
arriba: "fuera"
tipo: BNLL
}
BNLL ( La capa binomial normal de probabilidad logarítmica calcula la salida para cada entrada x calculando log(1 exp(x)) para cada entrada x.
4. Capa de datos
Los datos ingresan a Caffe a través de la capa de datos, que se encuentra en la parte inferior de toda la red. Los datos pueden provenir de una base de datos de alto rendimiento (LevelDB o LMDB) o directamente de la memoria. Si no busca eficiencia, puede leer datos del disco duro en HDF5 o formatos de imagen generales.
4.1 Base de datos
Tipo: 2 en memoria
Tipo: MEMORY_DATA
Parámetros requeridos:
batch_size , canal, alto, ancho: especifique el tamaño de los datos leídos de la memoria
La capa de datos de la memoria lee datos directamente de la memoria sin copiarlos.
Para usarlo, debe llamar a MemoryDataLayer::Reset (desde C) o Net.set_input_arrays (desde Python) para especificar una fuente de datos continua (como una matriz de filas principales 4D), leyendo un fragmento del tamaño de un lote a la vez.
4.3 Entrada HDF5
Tipo: HDF5_DATA
Parámetros requeridos:
fuente: nombre del archivo a leer
batch_size: el número de entradas procesadas a la vez
4.4 Salida HDF5
Tipo: HDF5_OUTPUT
Parámetros requeridos:
nombre_archivo: para generar el nombre del archivo
HDF5 funciona de manera diferente que las otras capas en esta sección. Escribirá el blob de entrada en el disco duro
Imagen 4.5
Tipo: IMAGE_DATA
Parámetros requeridos:
fuente: el nombre del archivo de texto, cada línea proporciona el nombre del archivo y la etiqueta de una imagen
batch_size: el número de imágenes en el lote
Parámetros opcionales:
rand_skip : comienza desde Omite este valor en la entrada, lo cual es útil en el descenso de gradiente estocástico asincrónico (SGD)
shuffle [falso predeterminado]
new_height, new_width: cambia el tamaño de todas las imágenes al tamaño de lotes . ancho: cambia el tamaño de todas las imágenes a este tamaño
4.6 Windows
Tipo: WINDOW_DATA
4.7 Dummy
Tipo: DUMMY_DATA
La capa ficticia se utiliza para el desarrollo y la depuración. El parámetro específico es DummyDataParameter.