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あり、ここでは最も簡単な1が(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

関連する問題