Keras는 그림 채널의 순서를 수정하는 방법

1. Error


Keras를 사용하고 있습니다.layers.convolutional.Convolution2D 때.

Convolution2D(32, 5, 5, border_mode='valid', input_shape=(1, 28, 28), activation='relu')
다음 오류를 보고합니다.
OverflowError: Range exceeds valid bounds
Keras 구성 이미지 채널 순서 오류로 인한 것입니다.위 코드는 그림 채널 순서를 [channels][height][width]

2. 이미지 채널 순서 수정


검사~/.keras/keras.json 파일

if "image_dim_ordering": is "th" and "backend": "theano", your input_shape must be (channels, height, width)
if "image_dim_ordering": is "tf" and "backend": "tensorflow", your input_shape must be (height, width, channels)
따라서 당신이 사용하는 채널 순서와 설정된 채널 순서가 일치하도록 보증해야 합니다
아니면 이렇게 수정을 하거든요.

from keras import backend
backend.set_image_dim_ordering('th')
보충: Keras 백엔드 데이터 차원 순서 설정
Keras는 비교적 고급스러운 딥러닝 프레임워크로 몇 가지 흔히 볼 수 있는 주류 딥러닝 프레임워크에 대한 봉인이다. 즉, Keras의 말에 따르면 그 뒷부분은 Tensorflow, Theano와 CNTK를 바탕으로 봉인된 것이다.
CNTK는 제가 많이 알지 못했어요.tensorflow의tensor의 차원 순서와 Theano의 차원 순서는 다르기 때문에Keras를 사용할 때 이 점을 각별히 주의해야 해요. 만약에 백엔드가 다르면 설정한 데이터 차원 순서도 달라요.
tensorflow의 데이터 차원 기본 순서는 channels_last의 마치, 즉 그 tensor의 데이터 차원은 [samples,rows,cols,channels]이고 Theano는 다르다. 그 데이터 순서는 channels_first, 즉 [samples,rows,cols,channels], 이것은 사실 이 두 프레임워크의 차이일 뿐이다. 만약keras로 딥러닝 모델을 쓴다면 사실은 백엔드를 설정하면 기본적으로 문제가 없고 데이터 차원의 문제를 너무 고려할 필요가 없다.
하지만 Keras의 데이터 차원은 바뀔 수 있다. 텐서플로우를 백엔드로 사용하더라도 Keras의 데이터 형식은 channels_first의, 그리고 이것은 프로필을 통해 고칠 수도 있고, 코드를 통해 고칠 수도 있습니다.
Keras의 프로필은 기본적으로 $HOME/입니다.keras/keras.json, 백엔드 구성을 직접 수정하는 txt 편집기를 열 수 있습니다.

{
    "floatx": "float32",
    "epsilon": 1e-07,
    "image_data_format": "channels_last",
    "backend": "tensorflow"
}
이것은 내 윈도우즈의 설정 정보입니다. 기본적으로tensorflow를 백엔드로 하고 데이터 형식은channels_last, 그런데 저는 작은 프로젝트가 있는데 처음에 Theano를 백엔드로 썼어요. 원래는 조금만 고치면 돼요. 그런데 이 프로젝트만 Theano로 바꿔야 하기 때문에 저는 프로필을 직접 고치지 않고 코드에서 백엔드를 수정했습니다. 여기는 Keras의 백엔드 백엔드로 해야 합니다. 수정된 코드는 다음과 같습니다.

from keras import backend as BK
BK.set_image_data_format("channels_first")
BK.set_image_dim_ordering("th")
이렇게 설정한 후에 이 프로그램이 달릴 때 백엔드는 바뀌지 않는다. 바뀐 것은 데이터의 차원 순서일 뿐이고 현재의 프로그램만 대상으로 하기 때문에 다른 프로그램에는 영향을 주지 않는다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기