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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1270閲覧

ImageDataGeneratorでMNISTを読み込みたい

51sep

総合スコア22

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/09/23 07:44

初学者です。pythonを用いてTensorflowの公式サイトで勉強しています。
公式サイト「Image classification」の画像データ(猫・犬)をMNISTにして、10クラスで実行してみたいと考えています。
ですが、初歩的な前処理でつまづいています。
まず、ImageDataGeneratorでMNISTを読み込む?(モデルに投入できるようにする?)にはどのようにしたらよいのでしょうか。
どなたかアドバイスをよろしくお願いいたします。

①まず、以下の指定?が分からない。

from keras.preprocessing.image import ImageDataGenerator train_dir = "./data/mnist"  # ←??? test_dir = "./data/mnist"  # ←???

②①ができたとして、その後、公式サイトのように(以下の様に)flow_from_directoryで処理できるのかが分からない。

batch_size = 128 epochs = 15 IMG_HEIGHT = 150 IMG_WIDTH = 150 train_image_generator = ImageDataGenerator(rescale=1./255) validation_image_generator = ImageDataGenerator(rescale=1./255) train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size, directory=train_dir, shuffle=True, target_size=(IMG_HEIGHT, IMG_WIDTH), class_mode='categorical') val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size, directory=validation_dir, target_size=(IMG_HEIGHT, IMG_WIDTH), class_mode='categorical')

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

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

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

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

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

guest

回答1

0

ベストアンサー

①まず、以下の指定?が分からない。

Python3

1train_dir = "./data/mnist"  # ←??? 2test_dir = "./data/mnist"  # ←???

"."は「今のディレクトリの」を示す記号です。カレントディレクトリと言います。

D:\>

Windowsであれば、上のように出ていればカレントディレクトリはD:\で、./data/mnistD:/data/mnistと同じ意味になります。

② ①ができたとして、その後、公式サイトのように(以下の様に)flow_from_directoryで処理できるのかが分からない。

Kerasのリファレンスを参照ください。先に指定したディレクトリからデータを読み出すように働きます。これは、ディレクトリ名を仕分けるように自動的にカテゴリ番号が割り振ってデータセットを作成する関数です。classesの引数に手動でラベルを設定することで、希望するように順番を決められるようです(これであっていると思いますが、使ったことはないですので…)。

投稿2020/09/23 22:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

51sep

2020/09/25 00:26

fourteenlengthさん、ご回答をどうもありがとうございました。 (何度もすみません、感謝いたします) ディレクトリの指定は、なんとか理解できました。 ところで、(基本的なことですが)MNISTは、このディレクトリのフォルダにダウンロード?する必要があるのでしょうか。。 「はじめてのニューラルネットワーク:分類問題の初歩」の時は、mnist.load_data()でこのようなフォルダを用意してなかったような気がします。それとも、最初にロードしたときに、どこかのフォルダに保存されているのでしょうか。。 もしどこかに保存されているとしても、fourteenlengthさんのおっしゃるとおり、フォルダ構造?も決まっているようで、素人ちゃんには大変かもしれない…と心が折れています。。 ちなみに、こちらの皆様のサイトを拝見させて頂きました。 https://i-doctor.sakura.ne.jp/font/?p=20515 https://ch241.lilacwells.com/ja/articles/keras-vgg16-finetune/post/ データセット拡張を試すのであれば、今のところ、公式サイトでは、「ImageDataGenerator」ということで、それを MNISTを使ってできれば、今までのモデルのaccと比較できるかも?と思いましたが、やっぱり、そう簡単にはいきませんね。。
退会済みユーザー

退会済みユーザー

2020/09/26 01:49

> 最初にロードしたときに、どこかのフォルダに保存されている 詳しい場所は覚えていませんが、キャッシュのような一時的なフォルダではなく、Pythonのシステムが入っているような永続的な場所にDLされたと思います。mnist.load_data()をする度に、あればDLされたファイルから、なければ自動でDLしてからロードされます。一連のロードは自動でされるので、細かい場所は気にしなくても問題ないと思います。 > フォルダ構造?も決まっている 上記のサイト(https://i-doctor.sakura.ne.jp/font/?p=20515)の″今回は、KaggleからダウンロードしたMNIST画像を”のそばの写真が分かりやすいと思います。数字の名前を付けたフォルダに画像を突っ込むだけ良いはずです。 > データセット拡張を試す データ増強は「本当は膨大なデータを用意して、ありうる対象物のドメイン(○○px四方の画像という概念の中で、ランダムなノイズや無関係な動物等ではなく、数字がとりうるパターン全部)をなるべく網羅したいのを、少ないデータからまねして用意できないかな」という技術です。学習本体から見ると横道にそれた内容(なくても動く)ですので、学習から判定まで、精度が低かったとしてもとりあえず動くようになってから試した方が良いと思います。
51sep

2020/09/26 08:03

fourteenlengthさん、コメントありがとうございます。すみません、いつもお世話になっております。。 さて、最初のMNISTをロードを読み込むところを色々と試しましたが、やっぱりうまいこといかず、現状、以下の感じです。 ディレクトリを確認し、以下のフォルダを作って、上記質問のプログラムを実行すると「Found 0 images belonging to 0 classes.」となります。 #カレントディレクトリの確認 %pwd #'H:\XXX\Python' train_dir = "./mnist/train" validation_dir = "./mnist/validation" 上記質問のプログラムを実行した結果 Found 0 images belonging to 0 classes. Found 0 images belonging to 0 classes. フォルダの中にデータがないのだから当たり前ですよね。。 (今の私には、少し方向性を間違えている感じ?)。
退会済みユーザー

退会済みユーザー

2020/09/26 23:28

train_dir(validation_dir)はカレントディレクトリのMNISTフォルダを指定するはずですので、'H:\XXX\Python\mnist\train'('H:\XXX\Python\mnist\validation')がそれぞれの対象となるはずです。 ここで、上記アドレスの中に「0」や「1」…「9」のようなフォルダを作成して、それぞれにカテゴリに対応する画像をしまわないといけません。たとえば、「0」フォルダの中で'dir'コマンドを行ったら、 cat0_001.jpg cat0_002.jpg cat0_003.jpg . . . のようにならないと”Found 0 images belonging to 0 classes.”となると思います。 参考:https://tane-no-blog.com/679/
51sep

2020/09/27 06:43

fourteenlengthさん、コメントありがとうございます。 やはり、MNISTをダウンロードする必要がある感じでしょうかね。。以下の方のサイトあたりでしょうか。。MNISTは、画像データということで、jpg等ではないので、ちょっと勝手が違います?でしょうか。 結局、いつも「データの取り込み(読み込み)」と「前処理」に時間を費やして、正確度の検討は後回し、、プログラムの技術を向上させたいところです(心折れる)。。 https://qiita.com/python_walker/items/e4d2ae5b7196cb07402b
退会済みユーザー

退会済みユーザー

2020/09/27 07:00

from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() で必要に応じてMNISTのデータはDLされます。MNISTのデータはx_trainのような状態(恐らくnumpy array)でまとまっていますので、JPEG等の画像ファイルの状態ではありません。画像一式もflow_from_directoryで読み込んだ後は最終的にnumpy array(か似たようなフォーマット)になっているはずです。
51sep

2020/09/28 19:21

fourteenlengthさん、コメントをありがとうございます。日々、勉強です。。 さて、作業の進捗ですが、やっぱり、mnist.load_data()を使用する方向にしました。。 前回いただいたご回答の質問で、せっかくMNISTでaccの比較をしたので、同様に減らしたMNISTを拡張した場合、どのぐらいaccが改善する?というあたりを確認したいと思いました。いままで、それぞれの手法をそれぞれのデータで断片的に確認したけど、イマイチ理解が深まりませんでした。同一データでどんな感じになるか、時間がかかりそうですが、見てみたい気がしました。 で、現状、mnist.load_data()で読込みこんだMNISTを、うまいこと、ImageDataGeneratorで変換、モデルコンパイルできずに、またグダグダしています。。
退会済みユーザー

退会済みユーザー

2020/09/28 21:30

> 同様に減らしたMNISTを拡張した場合、どのぐらいaccが改善する?というあたりを確認したいと思いました。 データセットを小さくしたMNIST vs データセットを小さくした上で、そこからデータを水増ししたMNISTでどれくらい精度が変わるか、と理解しました。 > mnist.load_data()で読込みこんだMNISTを、うまいこと、ImageDataGeneratorで変換 http://wild-data-chase.com/index.php/2019/02/04/post-370/ が参考になると思います。 mnist.load_data()では、(60000[枚], 32[px], 32[px], 1[ch])のようなデータが格納されるはずですが、ImageDataGenerator()では、(32[px], 32[px], 1[ch])のように元画像1枚ずつしか処理できないはずです。ですので、やるとすれば、 mnist.load_data()からランダムに1枚選択してImageDataGenerator()でデータを何倍かに増やす、をforかwhileでループすればできそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問