Keras의 SpatialDropout2D의 동작 구체적인 예

개요



SpatialDropout2D라고 하는 것이 있으므로 이미지 인식으로 이용을 검토했습니다만, 자면으로부터 이미지 한 것과 다른 동작이었습니다.
선행 기사 도 있습니다만, 화상으로 사용하는 경우의 구체예가 나와 있지 않으므로, 이쪽으로 정리합니다.

구체적인 예



이 이미지를 입력하면



이것이 일반 Dropout



이것은 SpatialDropout2D입니다. 이미지 전체에서 특정 채널을 Drop하는 동작입니다.



내가 [Spatial]이라는 자면에서 상상한 것은 이런 것이었습니다. 이것은 dropout의 noise_shape 인수를 성공적으로 주면 실현할 수 있습니다.



재현 코드



check_dropout.py
import numpy as np
import cv2
from tensorflow.keras.layers import *
from tensorflow.keras import backend as K

src = cv2.imread("colorbar.png")
height, width = src.shape[:2]

def point_dropout_function(x, drop_rate):
    s = K.shape(x)
    return K.dropout(x, drop_rate, (s[0], s[1], s[2], 1))

K.set_learning_phase(1)  # 実行時にDropout有効化するために必要
x = Input((height, width, 3))
y_dropout = Dropout(0.2)(x)
y_spatial = SpatialDropout2D(0.2)(x)
y_point = Lambda(lambda x: point_dropout_function(x, 0.2))(x)
f = K.function([x], [y_dropout, y_spatial, y_point])

for i in range(10):
    dst_dropout, dst_spatial, dst_point = f([src[None, :, :, :]])

    cv2.imshow("src", src)
    cv2.imshow("dst_dropout", dst_dropout[0])
    cv2.imshow("dst_spatial", dst_spatial[0])
    cv2.imshow("dst_point", dst_point[0])
    cv2.waitKey()

좋은 웹페이지 즐겨찾기