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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

受付中

ValueError: Input 0 is incompatible with layer flatten_2: expected min_ndim=3, found ndim=2

FALLOT
FALLOT

総合スコア16

Keras

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

1回答

0評価

0クリップ

8915閲覧

投稿2018/12/06 12:15

ValueError: Input 0 is incompatible with layer flatten_2: expected min_ndim=3, found ndim=2

画像分類をしようとすると上記のようなエラーが出ました.

CNNをはじめて実装したので,原因がよくわかっていません.

わかる方.宜しくお願い致します.

python

#https://qiita.com/hiroeorz@github/items/ecb39ed4042ebdc0a957 from keras.models import Sequential from keras.layers.convolutional import Conv2D from keras.layers import Activation, Dense, Dropout, Flatten, MaxPooling2D from keras.utils.np_utils import to_categorical from keras.optimizers import Adagrad from keras.optimizers import Adam from keras.models import load_model from keras.callbacks import EarlyStopping, ModelCheckpoint, CSVLogger import numpy as np from PIL import Image import os import time import csv start_time = time.time() print("開始時刻: " + str(start_time)) # 学習用のデータを作る. image_list = [] label_list = [] #ハイパーパラメータ #画像サイズ x = 120 y = 120 A = x*y #入力のノード数 #エポック数 B = 500 #バッチサイズ BATCH_SIZE = 32 #学習率 LR = 0.00001 #出力ノード数 output =9 # ./data/train 以下のa,b,cのディレクトリ以下の画像を読み込む。 for dir in os.listdir("data/train"): if dir == ".DS_Store": continue dir1 = "data/train/" + dir label = 0 if dir == "a": # 左下に最大応力:ラベル0 label = 0 elif dir == "b": # 右下に最大応力:ラベル1 label = 1 elif dir == "c": # 右下に最大応力:ラベル1 label = 2 elif dir == "d": # 右下に最大応力:ラベル1 label = 3 elif dir == "e": # 右下に最大応力:ラベル1 label = 4 elif dir == "f": # 右下に最大応力:ラベル1 label = 5 elif dir == "g": # 右下に最大応力:ラベル1 label = 6 elif dir == "h": # 右下に最大応力:ラベル1 label = 7 elif dir == "i": # 右下に最大応力:ラベル1 label = 8 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) print(image.shape) print('\n') image_list.append(image / 255.) # kerasに渡すためにnumpy配列に変換。 image_list = np.array(image_list) # ラベルの配列を1と0からなるラベル配列に変更 # 0 -> [1,0], 1 -> [0,1] という感じ。 Y = to_categorical(label_list) #わからない print("入力データの確認") print(image_list.shape) #np.savetxt("check/input_data_pixel.csv",image_list,delimiter=",") #print("ラベルデータの確認") print(image_list.shape) #np.savetxt("check/label_data.csv",Y,delimiter=",") #CNNの入力は4次元テンソルなので4次元テンソルに変換 image_list =np.expand_dims(image_list, axis=-1) # モデルを生成してニューラルネットを構築 model = Sequential() model.add(Conv2D(32,kernel_size=3,input_shape=(x,y,1),kernel_initializer='random_normal',bias_initializer='zeros')) #畳み込み層#32:カーネル数 3×3:カーネルサイズ model.add(Activation('relu')) model.add(Conv2D(32,kernel_size=3,kernel_initializer='random_normal',bias_initializer='zeros'))#畳み込み層 model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2)))#プーリング層 model.add(Dropout(0.25)) model.add(Conv2D(64,kernel_size=3,kernel_initializer='random_normal',bias_initializer='zeros'))#畳み込み層 model.add(Activation('relu')) model.add(Conv2D(64,kernel_size=3,kernel_initializer='random_normal',bias_initializer='zeros'))#畳み込み層 model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2)))#プーリング層 model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(100)) #全結合層 model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(10)) #全結合層 model.add(Activation('relu')) model.add(Dropout(0.0)) model.add(Dense(output)) model.add(Activation("softmax")) # オプティマイザ(最適化)に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, nb_epoch=B,verbose=1,callbacks=[csv_logger], batch_size=BATCH_SIZE, validation_split=0.3) # テスト用ディレクトリ(./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("data/train"): if dir == ".DS_Store": continue dir1 = "data/test/" + dir label = 0 if dir == "a": # 左下に最大応力:ラベル0 label = 0 elif dir == "b": # 右下に最大応力:ラベル1 label = 1 elif dir == "c": # 右下に最大応力:ラベル1 label = 2 elif dir == "d": # 右下に最大応力:ラベル1 label = 3 elif dir == "e": # 右下に最大応力:ラベル1 label = 4 elif dir == "f": # 右下に最大応力:ラベル1 label = 5 elif dir == "g": # 右下に最大応力:ラベル1 label = 6 elif dir == "h": # 右下に最大応力:ラベル1 label = 7 elif dir == "i": # 右下に最大応力:ラベル1 label = 8 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()

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Keras

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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