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

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

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

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

CNN (Convolutional Neural Network)

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

Python

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

受付中

conv2Dを使うとエラーが発生します

kokoo
kokoo

総合スコア0

Keras

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

CNN (Convolutional Neural Network)

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

Python

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

1回答

0評価

0クリップ

315閲覧

投稿2022/02/23 19:27

編集2022/02/27 19:06

1
https://zenn.dev/hiroe_orz17/articles/53af65f491122e
2
https://teratail.com/questions/158340
この二つを参考に画像判別システムを作成してみたのですが,エラーが発生します。

JupyterNotebook
Python 3.7
を使用しています。

ソースコード

python

import tensorflow as tf from tensorflow import keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Activation, Dense, Dropout,Flatten from tensorflow.keras.layers import Conv2D from tensorflow.keras.layers import MaxPool2D from tensorflow.keras.utils import to_categorical from tensorflow.keras.optimizers import Adagrad from tensorflow.keras.optimizers import Adam import numpy as np from PIL import Image import os from tensorflow.keras import datasets, layers, models import time import csv from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, CSVLogger import matplotlib.pyplot as plt # 学習用のデータを作る. image_list = [] label_list = [] #ハイパーパラメータ #画像サイズ x = 50 y = 50 A = x*y #入力のノード数 #エポック数 B = 50 #バッチサイズ BATCH_SIZE = 100 #学習率 LR = 0.00001 #出力ノード数 output =4 for dir in os.listdir("ramen/train"): if dir == ".DS_Store": continue dir1 = "data/train/" + dir label = 0 if dir == "nonfavorite": label = 0 elif dir == "favorite": label = 1 for file in os.listdir(dir1): if file != ".DS_Store": label_list.append(label) filepath = dir1 + "/" + file image = np.array(Image.open(filepath).resize((x, y))) print(image.shape) print(filepath) #image =np.reshape(image, A) image_list.append(image / 255.) image_list = np.array(image_list) Y = to_categorical(label_list) print("入力データの確認") print(image_list.shape) print("ラベルデータの確認") print(Y.shape) # モデルを生成してニューラルネットを構築 model = Sequential() model.add(Conv2D(32,3,input_shape=(x,y,1),kernel_initializer='random_uniform',bias_initializer='zeros')) model.add(layers.MaxPooling2D((2, 2))) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Conv2D(32,3,kernel_initializer='random_uniform',bias_initializer='zeros')) model.add(layers.MaxPooling2D((2, 2))) model.add(Activation('relu')) model.add(Conv2D(64,3,kernel_initializer='random_uniform',bias_initializer='zeros')) model.add(layers.MaxPooling2D((2, 2))) model.add(Activation('relu')) model.add(Flatten()) model.add(Dense(810)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(output)) model.add(Activation("softmax")) model.summary() # オプティマイザ(最適化)にAdamを使用 opt = Adam(lr=LR) # モデルをコンパイル model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) #わからない #CSVに各エポックの学習結果の保存 csv_logger = CSVLogger('result/training.csv') # 学習を実行。20%はテストに使用。 history = model.fit(image_list, Y, epochs=B, verbose=1, callbacks=[csv_logger], batch_size=BATCH_SIZE, validation_split=0.2) # テスト用ディレクトリ(./data/train/)の画像でチェック。正解率を表示する。 total = 0. ok_count = 0. #最終の学習結果の表示 loss, accuracy = model.evaluate(image_list, Y) print("\nloss:{} accuracy:{}".format(loss, accuracy)) #最終の学習結果を書き込む fp = open("result/RESULT.txt","w") fp.write("\nloss:{} accuracy:{}".format(loss, accuracy)) fp.close() #正解率の書き込み f = open("result/ANSWER.txt","w") for dir in os.listdir("ramen/train"): if dir == ".DS_Store": continue dir1 = "data/test/" + dir label = 0 if dir == "nonfavorite": # 左下に最大応力:ラベル0 label = 0 elif dir == "favorite": # 右下に最大応力:ラベル1 label = 1 for file in os.listdir(dir1): if file != ".DS_Store": label_list.append(label) filepath = dir1 + "/" + file image = np.array(Image.open(filepath).resize((x, y))) print(filepath) image =np.reshape(image, A) result = model.predict_classes(np.array([image / 255.])) print("label:", label, "result:", result[0]) L = label R = result[0] f.write(filepath) f.write("\nlabel:{} result:{}\n".format(L, R) ) total += 1. if label == result[0]: ok_count += 1. print("正答率: ", ok_count / total * 100, "%") SEIKAI =ok_count / total * 100 f.write("\n正答率:{}".format(SEIKAI)) end_time = time.time() print("終了時刻: ",end_time) print ("かかった時間: ", (end_time - start_time)) ttime = end_time - start_time fa = open("result/TIME.txt","w") fa.write("\nかかった時間:{} ".format(ttime)) fa.close()

エラー内容

python

ValueError Traceback (most recent call last) <ipython-input-80-6ff6d86090ba> in <module> 118 csv_logger = CSVLogger('result/training.csv') 119 # 学習を実行。20%はテストに使用。 --> 120 history = model.fit(image_list, 121 Y, 122 epochs=B, ValueError: in user code: ValueError: Input 0 of layer sequential_54 is incompatible with the layer: expected axis -1 of input shape to have value 1 but received input with shape [100, 50, 50, 3]

1のリンクをそのまま模してconv2dを使用するとエラーが出て、色々調べて2のリンクにたどり着きました。
エラー分を見ると、history = model.fit(image_list, このimage_listにconv2dが求めている入力が出来てないと思っています。

python

(50, 50, 3) data/train/favorite/fav_train (1).jpg 一部省略 (50, 50, 3) data/train/nonfavorite/nonfav_train (99).jpg 入力データの確認 (1000, 50, 50, 3) ラベルデータの確認 (1000, 2)

このように入力データが確認できてます。

ValueError  Input 0 of layer sequential_54 is incompatible with the layer: expected axis -1 of input shape to have value 1 but received input with shape [100, 50, 50, 3]
このエラーを読む限り、チャネルが求められたものとあっていないのかと思っています。
もし解決策がわかる方がいればよろしくお願いします。
※文字数の関係で一部エラーコードを掲載してません

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jbpb0

2022/02/23 22:33 編集

> 入力データの確認 (1000, 50, 50, 3) の「3」と、 > model.add(Conv2D(32,3,input_shape=(x,y,1),kernel_initializer='random_uniform',bias_initializer='zeros')) の「input_shape=(x,y,1)」の「1」が合ってないからだと思います 「input_shape=(x,y,1)」の「1」ですが、 https://teratail.com/questions/158340 で使ってる画像はグレースケールなので「1」にしてますが、質問者さんが使ってる画像がカラーなら「3」にします あるいは、画像を読み込んだ後にグレースケールに変換して、入力データのshapeが (1000, 50, 50, 1) となるようにします その場合は、「input_shape=(x,y,1)」はそのまま変えません
kokoo

2022/02/24 14:12

ありがとうございます。カラーですので3に変更し、一部コードも修正したところ無事動きました。ありがとうございます。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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

CNN (Convolutional Neural Network)

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

Python

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