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

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

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

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

CNN (Convolutional Neural Network)

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

Python

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

Q&A

1回答

1000閲覧

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

kokoo

総合スコア0

Keras

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

CNN (Convolutional Neural Network)

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

Python

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

0グッド

0クリップ

投稿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

1import tensorflow as tf 2from tensorflow import keras 3from tensorflow.keras.models import Sequential 4from tensorflow.keras.layers import Activation, Dense, Dropout,Flatten 5from tensorflow.keras.layers import Conv2D 6from tensorflow.keras.layers import MaxPool2D 7from tensorflow.keras.utils import to_categorical 8from tensorflow.keras.optimizers import Adagrad 9from tensorflow.keras.optimizers import Adam 10import numpy as np 11from PIL import Image 12import os 13from tensorflow.keras import datasets, layers, models 14import time 15import csv 16from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, CSVLogger 17import matplotlib.pyplot as plt 18 19# 学習用のデータを作る. 20image_list = [] 21label_list = [] 22 23#ハイパーパラメータ 24#画像サイズ 25x = 50 26y = 50 27A = x*y #入力のノード数 28#エポック数 29B = 50 30#バッチサイズ 31BATCH_SIZE = 100 32#学習率 33LR = 0.00001 34#出力ノード数 35output =4 36 37for dir in os.listdir("ramen/train"): 38 if dir == ".DS_Store": 39 continue 40 41 dir1 = "data/train/" + dir 42 label = 0 43 44 if dir == "nonfavorite": 45 label = 0 46 elif dir == "favorite": 47 label = 1 48 49 for file in os.listdir(dir1): 50 if file != ".DS_Store": 51 label_list.append(label) 52 filepath = dir1 + "/" + file 53 image = np.array(Image.open(filepath).resize((x, y))) 54 print(image.shape) 55 print(filepath) 56 #image =np.reshape(image, A) 57 image_list.append(image / 255.) 58 59image_list = np.array(image_list) 60 61Y = to_categorical(label_list) 62 63print("入力データの確認") 64print(image_list.shape) 65print("ラベルデータの確認") 66print(Y.shape) 67 68 69# モデルを生成してニューラルネットを構築 70model = Sequential() 71 72model.add(Conv2D(32,3,input_shape=(x,y,1),kernel_initializer='random_uniform',bias_initializer='zeros')) 73model.add(layers.MaxPooling2D((2, 2))) 74model.add(Activation('relu')) 75model.add(Dropout(0.2)) 76 77model.add(Conv2D(32,3,kernel_initializer='random_uniform',bias_initializer='zeros')) 78model.add(layers.MaxPooling2D((2, 2))) 79model.add(Activation('relu')) 80 81model.add(Conv2D(64,3,kernel_initializer='random_uniform',bias_initializer='zeros')) 82model.add(layers.MaxPooling2D((2, 2))) 83model.add(Activation('relu')) 84 85model.add(Flatten()) 86model.add(Dense(810)) 87model.add(Activation('relu')) 88model.add(Dropout(0.2)) 89 90 91model.add(Dense(output)) 92model.add(Activation("softmax")) 93model.summary() 94 95# オプティマイザ(最適化)にAdamを使用 96opt = Adam(lr=LR) 97# モデルをコンパイル 98model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) #わからない 99#CSVに各エポックの学習結果の保存 100csv_logger = CSVLogger('result/training.csv') 101# 学習を実行。20%はテストに使用。 102history = model.fit(image_list, 103 Y, 104 epochs=B, 105 verbose=1, 106 callbacks=[csv_logger], 107 batch_size=BATCH_SIZE, 108 validation_split=0.2) 109 110 111 112# テスト用ディレクトリ(./data/train/)の画像でチェック。正解率を表示する。 113total = 0. 114ok_count = 0. 115#最終の学習結果の表示 116loss, accuracy = model.evaluate(image_list, Y) 117print("\nloss:{} accuracy:{}".format(loss, accuracy)) 118#最終の学習結果を書き込む 119fp = open("result/RESULT.txt","w") 120fp.write("\nloss:{} accuracy:{}".format(loss, accuracy)) 121fp.close() 122#正解率の書き込み 123f = open("result/ANSWER.txt","w") 124 125for dir in os.listdir("ramen/train"): 126 if dir == ".DS_Store": 127 continue 128 129 dir1 = "data/test/" + dir 130 label = 0 131 132 if dir == "nonfavorite": # 左下に最大応力:ラベル0 133 label = 0 134 elif dir == "favorite": # 右下に最大応力:ラベル1 135 label = 1 136 137 for file in os.listdir(dir1): 138 if file != ".DS_Store": 139 label_list.append(label) 140 filepath = dir1 + "/" + file 141 image = np.array(Image.open(filepath).resize((x, y))) 142 print(filepath) 143 image =np.reshape(image, A) 144 result = model.predict_classes(np.array([image / 255.])) 145 print("label:", label, "result:", result[0]) 146 L = label 147 R = result[0] 148 f.write(filepath) 149 f.write("\nlabel:{} result:{}\n".format(L, R) ) 150 total += 1. 151 152 if label == result[0]: 153 ok_count += 1. 154 155 156 157 158print("正答率: ", ok_count / total * 100, "%") 159SEIKAI =ok_count / total * 100 160f.write("\n正答率:{}".format(SEIKAI)) 161 162end_time = time.time() 163print("終了時刻: ",end_time) 164print ("かかった時間: ", (end_time - start_time)) 165 166ttime = end_time - start_time 167fa = open("result/TIME.txt","w") 168fa.write("\nかかった時間:{} ".format(ttime)) 169fa.close() 170 171

エラー内容

python

1ValueError Traceback (most recent call last) 2<ipython-input-80-6ff6d86090ba> in <module> 3 118 csv_logger = CSVLogger('result/training.csv') 4 119 # 学習を実行。20%はテストに使用。 5--> 120 history = model.fit(image_list, 6 121 Y, 7 122 epochs=B, 8 9ValueError: in user code: 10 11 12 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

1(50, 50, 3) 2data/train/favorite/fav_train (1).jpg 34一部省略 56(50, 50, 3) 7data/train/nonfavorite/nonfav_train (99).jpg 8入力データの確認 9(1000, 50, 50, 3) 10ラベルデータの確認 11(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]
このエラーを読む限り、チャネルが求められたものとあっていないのかと思っています。
もし解決策がわかる方がいればよろしくお願いします。
※文字数の関係で一部エラーコードを掲載してません

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

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

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

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

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

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に変更し、一部コードも修正したところ無事動きました。ありがとうございます。
guest

回答1

0

入力データの確認
(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」ですが、
kerasでCNNをはじめてやる画像認識(入力層の4次元テンソルなのに3次元のまま どうすれば追加可能か)
で使ってる画像はグレースケールなので「1」にしてますが、質問者さんが使ってる画像がカラーなら「3」にします

あるいは、画像を読み込んだ後にグレースケールに変換して、入力データのshapeが
(1000, 50, 50, 1)
となるようにします
その場合は、「input_shape=(x,y,1)」はそのまま変えません

投稿2022/02/27 10:06

jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問