1

CNN을 사용하여 개 번식 식별을 분류하려고합니다. 나는 이미지를 그레이 스케일로 변환하고 크기를 줄이기 위해 다시 스케일링했다. 그래서 지금은 그들을 numpy 배열에 추가하고 훈련을하려고합니다. 또한 Relu 활성화 기능을 사용하기 때문에 다중 계층 및 개 카테고리의 서로 다른 카테고리에 대한 범주 적 교차 엔트로피와 잘 작동합니다.이미지를 CNN 용 배열로 변환

def RescaleGrayscaleImg(): 

    # iterate through the names of contents of the folder 
    for image_path in os.listdir(path): 

     # create the full input path and read the file 
     input_path = os.path.join(path, image_path) 

     # make image grayscale 
     img = io.imread(input_path) 
     img_scaled = rescale(img, 2.0/4.0) 
     GrayImg = color.rgb2gray(img_scaled) 

     # create full output path, 'example.jpg' 
     # becomes 'grayscaled_example.jpg', save the file to disk 
     fullpath = os.path.join(outPath, 'grayscaled_'+image_path) 
     misc.imsave(fullpath, GrayImg) 

내가 배열로 이미지를 변환 할 방법 : 아래

그레이 스케일 다시 규모에 대한 코드? 각 열은 이미지일까요? 어떤 도움이 도움이 될 것입니다.

+0

귀하의 질문은 무엇입니까? – Drop

+0

어떤 패키지를 사용하고 있습니까? – James

+0

나는 keras, scipy 및 skimage를 사용하고 있습니다. os –

답변

2

CNN의 경우 입력은 4 차원 텐서 [batch_size, width, height, channels]이어야하며 각 이미지는 3 차원 서브 텐서입니다. 이미지는 회색조이므로 channels=1입니다. 또한 교육용으로 모든 이미지의 크기는 동일해야합니다 (WIDTHHEIGHT).

skimage.io.imreadndarray을 반환하며 이것은 케라에 완벽하게 적용됩니다.

all_images = [] 
for image_path in os.listdir(path): 
    img = io.imread(input_path, as_grey=True) 
    img = img.reshape([WIDTH, HEIGHT, 1]) 
    all_images.append(img) 
x_train = np.array(all_images) 

확실하지 당신이 레이블을 저장하는 방법,하지만 당신은뿐만 아니라 라벨의 배열을 확인해야합니다 : 그래서 당신은이 같은 데이터를 읽을 수 있습니다. 나는 그것을 y_train라고 부른다. 이 같은 하나의 핫로 변환 할 수 있습니다 :

y_train = keras.utils.to_categorical(y_train, num_classes) 

keras의 모델은 여기에 꽤 straighforward있는 간단한 일 (사용 relu 및 X-엔트로피) :

model = Sequential() 
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', 
       input_shape=[WIDTH, HEIGHT, 1])) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Flatten()) 
model.add(Dense(128, activation='relu')) 
model.add(Dense(num_classes, activation='softmax')) 

model.compile(loss=keras.losses.categorical_crossentropy, 
       optimizer=keras.optimizers.Adadelta(), 
       metrics=['accuracy']) 

model.fit(x_train, y_train, batch_size=100, epochs=10, verbose=1) 

전체 작업 MNIST 예는 here입니다.

+0

고맙습니다. –

+0

어디에서 폭과 높이를 찾을 수 있습니까? ValueError : 크기 14000의 배열을 모양 (250,188,1)으로 바꿀 수 없습니다 –

+0

데이터에 대한 질문입니다. 같은 크기의 이미지입니까? – Maxim

관련 문제