🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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

Q&A

解決済

2回答

11558閲覧

UnidentifiedImageError: cannot identify image fileのエラーに関して

kosakana_fav

総合スコア1

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

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

0グッド

1クリップ

投稿2021/01/08 18:39

お世話になります。
現在、機械学習に興味があり勉強中です。

tensorflowとKerasを用いての基礎的な学習を試し、現在自分のデータを使用して試しています。

ImageDataGenerorを使ったラベル設定の仕方を参考に、初心者ながらプログラムしてみました。

行おうとしているのは多クラス分類で、CNNを用いた学習を試みています。

実行してみたのですが、
UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f3485b360>

というエラーで詰まっています。

エラー名で調べたのですが、はっきりとした解決手段がわかりません。

心当たりなどががあれば教えていただきたいです。

何卒ご教示のほどお願い申し上げます。

参考にさせていただいたサイト:
( https://qiita.com/yakisobamilk/items//686d6ad5ae3285aec639 )

<フォルダ構成>
picture -╷- train -╷- 001(分類1) -╷- **.png #学習用
╎ ╎   ╎ (多数の画像・・省略)
╎ ╎   ╵- **.png
╎ ╵- 002(分類2) - (略)
╎ :
╎ ╵- 010(分類10) - (略)

╵- val -╷- 001(分類1) - (略) #学習検証用
╵- 002(分類2) - (略)
:
- 010(分類10) - (略)

python

1#import 省略 2base_dir = ./picture 3 4train_dir = os.path.join(base_dir, 'traindata') 5validation_dir = os.path.join(base_dir, 'testdata') 6 7 8train_datagen = ImageDataGenerator(rescale=1.0/255) 9val_datagen = ImageDataGenerator(rescale=1.0/255) 10 11train_generator = train_datagen.flow_from_directory( 12 train_dir, 13 target_size=(128, 88), 14 color_mode='grayscale', 15 batch_size=20, 16 class_mode='categorical') 17 18validation_generator = val_datagen.flow_from_directory( 19 validation_dir, 20 target_size=(128, 88), 21 color_mode='grayscale', 22 batch_size=20, 23 class_mode='categorical') 24 25 26 27model = models.Sequential() 28model.add(layers.Reshape((128, 88, 1), input_shape=(128*88,), name='reshape')) 29model.add(layers.Conv2D(18, (7, 7), padding='same', 30 kernel_initializer=initializers.TruncatedNormal(), 31 use_bias=True, activation='relu', 32 name='conv_filter1')) 33model.add(layers.MaxPooling2D((2, 2), name='max_pooling1', strides=2)) 34model.add(layers.Conv2D(45, (5, 5), padding='same', 35 kernel_initializer=initializers.TruncatedNormal(), 36 use_bias=True, activation='relu', 37 name='conv_filter2')) 38model.add(layers.MaxPooling2D((3, 3), name='max_pooling2',strides=2)) 39model.add(layers.Flatten(name='flatten')) 40model.add(layers.Dense(1024, activation='relu', 41 kernel_initializer=initializers.TruncatedNormal(), 42 name='hidden')) 43model.add(layers.Dropout(rate=0.5, name='dropout')) 44model.add(layers.Dense(10182, activation='softmax', name='softmax')) 45 46model.summary() 47 48 49 50 51model.compile(optimizer='adam', 52 loss='categorical_crossentropy', 53 metrics=['acc']) 54 55 56 57history = model.fit(train_generator, 58 validation_data=validation_generator, 59 batch_size=128, epochs=10)

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

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

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

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

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

guest

回答2

0

base_dir = ...
を文字列に

参考
機械学習でオバマとスモーリングを判別したい-後編-
の「2.1. ディレクトリの作成」のコード

【追記】もう一つありました
「'traindata'」と「'testdata'」を、実際のフォルダ名に合わせて変える
それも、上記Webページを参照してください

【追記2】さらにもう一つありました
お書きになってるコードでのデータの準備のやり方の場合は、model.fit()ではなくmodel.fit_generator()を使います
それも、上記Webページを参照してください

投稿2021/01/08 22:31

編集2021/01/09 22:06
jbpb0

総合スコア7653

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

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

kosakana_fav

2021/01/09 14:55

回答ありがとうございます。 この参考サイトの2.1のように、画像のあるディレクトリに対して os.path.joinを行う必要があるのでしょうか?
jbpb0

2021/01/09 21:41 編集

「base_dir =」の右が文字列になってません 「’」か「”」を前後に挿入する(囲う)と文字列になります https://www.atmarkit.co.jp/ait/spv/1904/16/news013.html#strbasicrepr 【追記】最初に回答に書いたのは上記の意味でしたが、「train_dir」と「validation_dir」で指定してるフォルダ名を「’train’」とかの実際のに合わせる必要もあります 回答にも追記しました
jbpb0

2021/01/09 21:27

回答で参考に紹介したWebページのコードで、下記の部分は無視してください test_dir = os.path.join(base_dir, 'test') train_smalling = os.path.join(train_dir, 'smalling') valid_smalling = os.path.join(valid_dir, 'smalling') test_smalling = os.path.join(test_dir, 'smalling') train_obama = os.path.join(train_dir, 'obama') valid_obama = os.path.join(valid_dir, 'obama') test_obama = os.path.join(test_dir, 'obama')
jbpb0

2021/01/09 22:22

model.fit_generator()の「steps_per_epoch」と「validation_steps」は、指定しなくても大丈夫です 指定しなければ、どちらも自動的に データ数/バッチサイズ になるはず
kosakana_fav

2021/01/10 10:29

細かく教えていただきありがとうございます! 文字列の件とmodel.fit件、修正しました。 ディレクトリ名に関しては表記ミスでした。 修正の後、走らせてみたのですが、 エラーの内容は変わりませんでした汗 もう少し細かく調べてみます。 ありがとうございます。
guest

0

自己解決

原因が分かりましたのでここに記載します.

まずは,jbpb0氏の回答に書かれていたこと,

もう一つは隠しファイルが問題でした.
隠しファイルを削除すれば解決できました.

ありがとうございました.

投稿2021/01/17 16:04

編集2021/01/18 04:54
kosakana_fav

総合スコア1

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

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

jbpb0

2021/01/18 00:33

私が回答に書いた内容(model.fit()ではなくmodel.fit_generator()を使う等)をやった上で、隠しファイルを削除したらうまくいった、ということですか?
kosakana_fav

2021/01/18 04:34

そうなります。 教えていただいたmodel.fit_generator()を使っていなかったのが一点 根本的な部分として、隠しファイルが存在しており、学習の際に エラーの原因となっていたことになります。
jbpb0

2021/01/18 04:48

ネット検索してたどり着いた人はたいていベストアンサーしか見ないので、私が回答に書いた「必ずやらないといけないこと」が見落とされますので、回答に一言「jbpb0の回答に書かれていたことに加え」みたいに書いといてください こういうサイトの情報は、質問した本人だけじゃなく、同様な悩みをかかえた多くの人にも参照され活かされる、という意味もありますので
kosakana_fav

2021/01/18 04:54

ご指摘ありがとうございます。 修正させていただきました。
jbpb0

2021/01/18 05:58

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問