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

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

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

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

Python

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

Q&A

解決済

1回答

321閲覧

Tensorflowを用いての二項分類 画像がうまく読み込みません泣

ktmr

総合スコア10

Keras

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

Python

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

0グッド

0クリップ

投稿2022/09/11 09:45

編集2022/09/14 14:02

前提

Tensorflowを用いての二項分類を勉強しています。

用意した画像をx_train, y_train, x_test, y_testに振り分けるため、
添付した画像のように、split関数を使っているのですが”¥”がうまく読み込んでくれません。

実現したいこと

・画像を読み込ませられるようにしたい。

試したこと

このディレクトリパスで"img_data"が出力されていることは確認済みです。
自分なりにいろいろ調べた結果、”¥”を”¥¥”と表現することに気が付きました。
"¥¥"に表記を変え、試した結果、以下のエラーが発生しました。
イメージ説明
ファイルの形式がおかしいとのエラー文だと思われますが、拡張子jpegで統一してあります。

該当のソースコード

#ライブラリのインポート import tensorflow as tf from tensorflow import keras import numpy as np import matplotlib.pyplot as plt import glob #画像の準備 x_train = [] #訓練用のimage y_train = [] #訓練用のlabels  x_test = [] #テスト用のimage y_test = [] #テスト用のimage for f in glob.glob(".\image\*\*\*.jpeg"): img_data = tf.io.read_file(f) img_data = tf.io.decode_jpeg(img_data) img_data = tf.image.resize(img_data,[100,100]) if f.split("\\")[1] == "train": x_train.append(img_data) y_train.append(int(f.split("\\")[2].split("_")[0])) elif f.split("\\")[1] =="test": x_test.append(img_data) y_test.append(int(f.split("\\")[2].split("_")[0])) x_train = np.array(x_train) / 255.0 y_train = np.array(y_train) x_test = np.array(x_test) / 255.0 y_train = np.array(x_test)

イメージ説明

補足情報(FW/ツールのバージョンなど)

・Python 3.9.12
・Anaconda3 4.12.0 2022.05-64bit
・Tensorflow 2.6.0
・Keras 2.6.0
イメージ説明

イメージ説明
こういった画像が、各20枚、2種類あるイメージ。

イメージ説明
fを出力。

イメージ説明
for文先頭にprintを挿入した結果。

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

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

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

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

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

can110

2022/09/11 10:02

コードなどは画像ではなくテキスト(文字)で提示ください。
meg_

2022/09/11 10:24

> 拡張子jpegで統一してあります。 画像形式は本当にjpegですか?
ktmr

2022/09/11 11:13

はい。jpegで統一してあることを再確認しました。
meg_

2022/09/11 11:44

拡張子の話ではなく、エラーメッセージにあるようにファイル形式が”JPEG、PNG、GIF、BMP"以外ではありませんか? 画像はどのように用意されたのでしょうか?
ktmr

2022/09/11 14:49

画像はGoogleの画像検索から画像分類に扱えそうな画像を、それぞれ20枚ずつ集めました。 その後、画像の拡張子がjpgで一度、これと同じようなエラー文が出たため、jpegに統一して、再度行った次第です。
ktmr

2022/09/11 14:53

jpegに変更してから、"img_data"にデータが入っていることを確認できました。 そして次に、本題にもあるsplit関数での”¥”記号のエラーが出ました。 "¥"では通らなかったため、"¥¥"に変更した結果、上記のエラー文が再度出たという状況になります。
meg_

2022/09/11 15:12

> その後、画像の拡張子がjpgで一度、これと同じようなエラー文が出たため こちらでtf.io.read_file()とtf.io.decode_jpegを試したところでは拡張子「jpg」でエラーは出ませんでした。 > 画像はGoogleの画像検索から画像分類に扱えそうな画像を、それぞれ20枚ずつ集めました。 エラーが発生した際のfの値は何になっているか確認しましたか? 問題のあるファイルが混ざっているのかもしれません。
ktmr

2022/09/11 15:18

fの値を確認いたしました。
jbpb0

2022/09/15 00:07 編集

「hand_0.jpeg」を読み込んだ時に「img_data = tf.io.decode_jpeg(img_data)」の行でエラーになってるので、「hand_0.jpeg」がおかしい可能性があります その画像を取り除いてから再度実行してみてください もし他の画像でも同様に「img_data = tf.io.decode_jpeg(img_data)」の行でエラーが出たら、エラーが出た時の画像を取り除いて、エラーが出なくなるまでそれを繰り返してみてください
guest

回答1

0

ベストアンサー

python

1 if f.split("\\")[1] == "train":

↓ 修正

python

1 if f.split("\\")[2] == "train":

 

python

1 y_train.append(int(f.split("\\")[2].split("_")[0]))

↓ 修正

python

1 y_train.append(int(f.split("\\")[3].split("_")[0]))

 

python

1 elif f.split("\\")[1] =="test":

↓ 修正

python

1 elif f.split("\\")[2] =="test":

 

python

1 y_test.append(int(f.split("\\")[2].split("_")[0]))

↓ 修正

python

1 y_test.append(int(f.split("\\")[3].split("_")[0]))

 
forループの先頭に下記を追加して実行したら、修正の理由が分かると思います

python

1 print(f.split("\\"))

投稿2022/09/14 10:54

jbpb0

総合スコア7651

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

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

ktmr

2022/09/14 11:21

ご指摘の通り、forループの先頭にprint分を追加して検証したのですが、 ['image', 'test', '0_hand', 'IMG_0963.jpeg'] ['image', 'test', '1_foot', 'S__81166448.jpeg'] ['image', 'train', '0_hand', 'hand_0.jpeg'] ここで止まってしまいました。 画像データがおかしいという可能性もあるのでしょうか?
jbpb0

2022/09/14 12:06

for f in glob.glob(".\image\*\*\*.jpeg"): ですよね for f in glob.glob("image\*\*\*.jpeg"): じゃなくて
ktmr

2022/09/14 14:00

失礼しました。 for f in glob.glob(".\image\*\*\*.jpeg"): に修正して、再度実行したのですが、同じ結果でした。 イメージも再添付いたしました。
jbpb0

2022/09/15 00:05 編集

> イメージも再添付いたしました。 を見ると、3枚目の「hand_0.jpeg」を読み込んだ時に「img_data = tf.io.decode_jpeg(img_data)」の行でエラーになってるので、「hand_0.jpeg」がおかしい可能性があります その画像を取り除いてから再度実行してみてください もし他の画像でも同様に「img_data = tf.io.decode_jpeg(img_data)」の行でエラーが出たら、エラーが出た時の画像を取り除いて、エラーが出なくなるまでそれを繰り返してみてください
ktmr

2022/09/15 02:47

解決しました!!! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問