質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

174閲覧

keras 機械学習

22Go

総合スコア55

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/22 21:44

下記のようにjupyternotebookにて画像認識の学習を行なっています。

画像の取り込みについてです・
現在のディレクトリが
dir/train/a
/b
/c
/valid/a
/b
/c
/test/a
/b
/c

といった構成になってます。
train_valid_splitではなく自分でフォルダ分けをし、学習を行なってます。

ループでtrain(a,b,c)/valid(a,b,c)/test(a,b,c)と1個ずつ読み込んでいくのではなく、
trainのディレクトリを読み込んだ時に自動で中のa,b,cを読み込むようにするにはどうしたらいいでしょうか?
現在はオーギュメントして画像の調整が終わるごとにtrain/aの画像をごっそりと変える作業を行なっており、非常に時間がかかってしまい困っています。

python

1# coding:utf-8 2import keras 3from keras.utils import np_utils 4from keras.layers.convolutional import Conv2D, MaxPooling2D 5from keras.models import Sequential 6from keras.layers.core import Dense, Dropout, Activation, Flatten 7from keras.preprocessing.image import array_to_img, img_to_array, list_pictures, load_img 8import numpy as np 9import pandas as pd 10import matplotlib.pyplot as plt 11import seaborn as sns 12from sklearn.metrics import confusion_matrix 13from sklearn.neighbors import KNeighborsClassifier 14from sklearn.model_selection import train_test_split 15 16X = []#train 17Y = [] 18A = []#validation 19B = [] 20V = []#test 21W = [] 22 23ep = 10 24size = 10,10 25 26 27 28# aの画像 29for picture in list_pictures('dir/train/a'): 30 img = img_to_array(load_img(picture, target_size=(size))) 31 X.append(img) 32 Y.append(0) 33 34for picture in list_pictures('dir/vali/a'): 35 img = img_to_array(load_img(picture, target_size=(size))) 36 A.append(img) 37 B.append(0) 38 39for picture in list_pictures('dir/test/a'): 40 img = img_to_array(load_img(picture, target_size=(size))) 41 V.append(img) 42 W.append(0) 43 44# bの画像 45for picture in list_pictures('dir/train/b'): 46 img = img_to_array(load_img(picture, target_size=(size))) 47 X.append(img) 48 Y.append(1) 49 50for picture in list_pictures('dir/vali/b'): 51 img = img_to_array(load_img(picture, target_size=(size))) 52 A.append(img) 53 B.append(1) 54 55for picture in list_pictures('dir/test/b'): 56 img = img_to_array(load_img(picture, target_size=(size))) 57 V.append(img) 58 W.append(1) 59 60# cの画像 61for picture in list_pictures('dir/train/c'): 62 img = img_to_array(load_img(picture, target_size=(size))) 63 X.append(img) 64 Y.append(2) 65 66for picture in list_pictures('dir/train/c'): 67 img = img_to_array(load_img(picture, target_size=(size))) 68 A.append(img) 69 B.append(2) 70 71for picture in list_pictures('dir/train/c'): 72 img = img_to_array(load_img(picture, target_size=(size))) 73 V.append(img) 74 W.append(2) 75 76X = np.asarray(X) 77Y = np.asarray(Y) 78A = np.asarray(A) 79B = np.asarray(B) 80V = np.asarray(V) 81W = np.asarray(W) 82 83# 画素値を0から1の範囲に変換 84X = X.astype('float32') 85X = X / 255.0 86A = A.astype('float32') 87A = A / 255.0 88V = V.astype('float32') 89V = V / 255.0 90 91# クラスの形式を変換 92Y = np_utils.to_categorical(Y, 3)#(ベクトル変換したいラベル、配列数) 93B = np_utils.to_categorical(B, 3) 94W = np_utils.to_categorical(W, 3) 95 96X_train, Y_train = (X, Y) 97A_vali, B_vali = (A, B) 98V_test, W_test = (V, W) 99 100# 【CNNを構築】 101model = Sequential() 102model.add(Conv2D(32, (3, 3), padding='same', 103 input_shape=X_train.shape[1:])) 104model.add(Activation('relu')) 105model.add(Conv2D(32, (3, 3))) 106model.add(Activation('relu')) 107model.add(MaxPooling2D(pool_size=(2, 2))) 108model.add(Dropout(0.4)) 109model.add(Conv2D(64, (3, 3), padding='same')) 110model.add(Activation('relu')) 111model.add(Conv2D(64, (3, 3))) 112model.add(Activation('relu')) 113model.add(MaxPooling2D(pool_size=(2, 2))) 114model.add(Dropout(0.4)) 115model.add(Flatten()) 116model.add(Dense(512)) 117model.add(Activation('relu')) 118model.add(Dropout(0.4)) 119model.add(Dense(3))#カテゴリー数 120model.add(Activation('softmax')) 121 122# 【コンパイル】 123model.compile(loss='categorical_crossentropy',#損失関数 124 optimizer='adam',#最適化、オブジェクト 125 metrics=['accuracy'])#評価関数、正解率 126 127#【学習実行】 128history = model.fit(X_train, Y_train, batch_size=2048, epochs=ep, 129 validation_data = (A_vali, B_vali), verbose = 1) 130 131score = model.evaluate(V_test, W_test, verbose = 1) 132print("test_acc", score[1], "test_loss", score[0])

よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

python

1 import os 2 3folders = os.listdir('dir/') 4for folder in folders: 5 if folder == "train": 6 folder_a = os.listdir("dir/train/a") 7 X = [img_to_array(load_img(picture, target_size=(size))) for picture in folder_a] 8 Y = np.zeros(len(folder_a)) 9 10 folder_b = os.listdir("dir/train/b") 11 X.append(*[img_to_array(load_img(picture, target_size=(size))) for picture in folder_b]) 12 Y.append(*np.zeros(len(folder_b)).tolist()) 13 14 folder_c = os.listdir("dir/train/c") 15 X.append(*[img_to_array(load_img(picture, target_size=(size))) for picture in folder_c]) 16 Y.append(*np.zeros(len(folder_c)).tolist())

多分こうだと思います

投稿2019/08/22 22:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問