red neuronal convolucional marco (con código de aplicación) a implementar (ii)

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:
tf_converlution
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')

source_cat

查看图片维度
print (cat.shape[0])
print (cat.shape[1])

h_w

# 将图片矩阵转化为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))

con_same

# padding="VALID"
plt.imshow(np.squeeze(edge2_np),cmap='gray')
plt.title('shape={}'.format(edge2_np.shape))

conv_valid
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:
max_pool
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))

pool_max

# 画图 padding='VALID'
plt.imshow(np.squeeze(small_im2_np),cmap='gray')
plt.title('shape={}'.format(small_im2_np.shape))

valid_pool
Estrategias encontrado puesta en común de capa de acolchado cero, las dimensiones de la salida no se ve afectada.

总结,通过卷积和池化实现,我们发现,池化在维度下降一半的情况下,并没有丢失多少信息。
Publicado ocho artículos originales · ganado elogios 6 · vistas 2526

Supongo que te gusta

Origin blog.csdn.net/weixin_42374329/article/details/105222107
Recomendado
Clasificación