Learning Fuente: teoría del aprendizaje profundidad y el combate real
en el artículo anterior, la convolución de redes neuronales para hacer un par de conceptos básicos para entender, para saber lo que significaba convolución, lo que se agruparon, ¿cuál es la red neuronal de convolución. Los contenidos principales de este artículo es la convolución realización y se agruparon con el tensorflow.
Utilice la versión introducida:
tensorflow: 1,15
Python: 3
circunvolución
Convolución tensorflow el API es, tf.nn.conv2d ().
Parámetro como se muestra a continuación:
Parámetro explicado como sigue:
El primer parámetro: INPUT, es decir, los datos de entrada, típicamente un (lote, h, w, canales ) de los vectores de 4 dimensiones:
- Introduzca un número de imágenes de: lote
- h: representa la altura de la imagen
- w: representa la anchura de la imagen
- Canales: La imagen representa el número de canales, tal como una imagen de los canales 3 rpg
El segundo parámetro: filtro, es decir convolución kernel, sino también por una (k_h, k_w, IN, OUT) de los vectores de 4 dimensiones:
- k_h: altura del núcleo de convolución
- w_h: convolución kernel ancho
- en: el número de canales, el mismo número de canales de la imagen general
- Salida: es decir, el número de convolución
El tercer parámetro: pasos grandes, es decir, en movimiento paso, sino también por un (1, s_h, s_w, 1) un vector de 4 dimensiones:
- s_h: en movimiento en la altura de los escalones
- s_w: se mueve en el paso a lo ancho
- Sobre s_h, los parámetros de ubicación s_w relacionados con el hecho, y data_format, data_format en dos formas: ' "NHWC" y "NCHW", el primer caso, strdes expresados como (1, s_h, s_w, 1), en el segundo, los pasos expresados como (1,1, s_h, s_w)
El cuarto parámetro: el relleno, es decir, si la salida se rellena con ceros Política
- Si el relleno = "igual", tensorflow salida voluntad con relleno de ceros para asegurar que las mismas de entrada y salida dimensiones;
- Si el relleno = "válido", tensorflow no lo hace automáticamente ceros.
Otros parámetros del defecto, los estudiantes pueden explorar su interés.
La implementación del código de convolución
# 导入相关模块
import tensorflow as tf
import urllib.request
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
#导入图片
cat_url = 'https://image.ibb.co/iFGs0x/kitty.png'
cat = Image.open(urllib.request.urlopen(cat_url)).convert('L')
cat = np.array(im,dtype='float32')
# 可视化图片
plt.imshow(cat.astype('uint8'),cmap='gray')
查看图片维度
print (cat.shape[0])
print (cat.shape[1])
# 将图片矩阵转化为tensor
cat = tf.constant(cat.reshape((1,cat.shape[0],cat.shape[1],1)),name='input')
# 定义一个卷积核
sobel_kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]],dtype=np.float32)
sobel_kernel = tf.constant(sobel_kernel,shape=(3,3,1,1))
#调用tensorflow 卷积API
# padding='SAME' 的卷积
edge1 = tf.nn.conv2d(cat,sobel_kernel,[1,1,1,1],'SAME',name='same_conv')
# padding='VALID'的卷积
edge2 = tf.nn.conv2d(cat,sobel_kernel,[1,1,1,1],'VALID',name='valid_conv')
#激活tensorflow
sess = tf.InteractiveSession()
edge1_np = sess.run(edge1)
edge2_np = sess.run(edge2)
# padding = 'SAME'下的图片
plt.imshow(np.squeeze(edge1_np),cmap='gray')
plt.title('shape={}'.format(edge1_np.shape))
# padding="VALID"
plt.imshow(np.squeeze(edge2_np),cmap='gray')
plt.title('shape={}'.format(edge2_np.shape))
Mediante la comparación de los dos métodos, nos dimos cuenta de qué? Nos relleno para las entradas y salidas dimensiones Dimensiones del mismo cuadro es el mismo.
pooling
tensorflow ha agrupado capa API encapsulado, en esta discusión maximizamos capa de células API :. tf.nn.max_pool ()
parámetro como se muestra a continuación:
explicación específica:
Valor: es decir, de entrada, es un tensor de cuatro dimensiones ( . BATCH, H, W, canales)
ksize: tamaño de la piscina del núcleo, es un tensor de cuatro dimensiones (1, k_h, k_w, 1), y el mismo significado que la convolución.
pasos :. convolución mismos significados zancadas
padding: convolución con el acolchado lo que significa.
la implementación del código puesta en común
# padding='SAME'
small_im1 = tf.nn.max_pool(cat,[1,2,2,1],[1,2,2,1],'SAME',name='same_max_pool')
# padding = "VALID"
small_im2 = tf.nn.max_pool(cat,[1,2,2,1],[1,2,2,1],'VALID',name = 'valid_max_pool')
# 激活tensor
small_im1_np,small_im2_np = sess.run([small_im1,small_im2])
#画图 padding='SAME'
plt.imshow(np.squeeze(small_im1_np),cmap='gray')
plt.title('shape={}'.format(small_im1_np.shape))
# 画图 padding='VALID'
plt.imshow(np.squeeze(small_im2_np),cmap='gray')
plt.title('shape={}'.format(small_im2_np.shape))
Estrategias encontrado puesta en común de capa de acolchado cero, las dimensiones de la salida no se ve afectada.
总结,通过卷积和池化实现,我们发现,池化在维度下降一半的情况下,并没有丢失多少信息。