【发布时间】:2020-06-28 15:41:20
【问题描述】:
当我有多个 Conv2D 层,只有通道,在 Keras 中级联时,最终形状对应于最后阶段的(批次、行、列、过滤器)。如果过滤器的数量在所有层中都是 1,我可以毫无问题地计算输出,但是,当过滤器的数量不是一个时会发生什么?例如,在这段代码中,我有 3 个带有 2,2 和 1 个过滤器的 Conv2D 层。我在第二层计算结果:
# 1ª etapa
padding = "same"
i_s = (16,32,32) # Batch y tamaño de la imagen de entrada
# 1ª Etapa
f_s_1 = (9,9) # Tamaño del filtro 1
filters_1 = 2 # Número de filtros 1
strides_1 = (1,1) # Strides 1
# 2ª Etapa
f_s_2 = (9,9) # Tamaño del filtro 2
filters_2 = 2 # Número de filtros 2
strides_2 = (1,1) # Strides 2
# 3ª Etapa
f_s_3 = (9,9) # Tamaño del filtro 2
filters_3 = 1 # Número de filtros 2
strides_3 = (1,1) # Strides 2
# Matriz de imágenes
I = np.random.random(i_s).astype(np.float32)
If = np.copy(I)
I.shape = (i_s[0],i_s[1],i_s[2],1)
# Convolución 2D mediante keras
model = Sequential()
k_s = (i_s[1],i_s[2],1)
model.add(Conv2D(filters_1, f_s_1, input_shape=k_s, strides=strides_1, padding=padding))
model.add(Conv2D(filters_2, f_s_2, strides=strides_2, padding=padding))
# Calculo la salida en la segunda etapa
reference = model.predict(I)[:,:,:,:] # Convolución de referencia
model.add(Conv2D(filters_3, f_s_3, strides=strides_3, padding=padding))
形状结果是 (16,32,32,2) 但我认为输出形状会是 (16,32,32,4) 因为 2过滤器和 2 个过滤器是 4 个功能......不是吗?
过滤器形状是(k_h,k_w,前一层的过滤器,实际层的过滤器)。我也不明白这个形状。 前一层过滤器的维度是多少。我用这段代码捕获了过滤器:
# Se coge el filtro de la capa de convolución de keras
filters = model.get_weights()
filters_stg1 = filters[0][:,:,:,:]
filters_stg2 = filters[2][:,:,:,:]
filters_stg3 = filters[4][:,:,:,:]
Shapes of the filters. I don't understand the third dim
我正在阅读关于体积上的卷积...这是使用 Keras 将特征分组为一个的过程吗?对特征进行分组的数学过程是什么?
【问题讨论】:
标签: python tensorflow keras conv-neural-network