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

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

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1809閲覧

ValueError: Error when checking input: expected dense_1_input to have shape (1875,) but got array wi

退会済みユーザー

退会済みユーザー

総合スコア0

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/02/13 06:42

前提・実現したいこと

画像判別機を作っています。今回は、5円玉と、50円玉の2種類を分類しようと思っています。
そこで、Pythonでコードを見ながら書いてみることにしました。
しかし、エラーが出たので、わかる方がいらっしゃったら、解決策を教えてくださるとありがたいです。

発生している問題・エラーメッセージ

WARNING:tensorflow:From C:\Anaconda\lib\site-packages\tensorflow_core\python\ops\resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version. Instructions for updating: If using Keras pass *_constraint arguments to layers. Traceback (most recent call last): File "C:/Users/kamimura/syncFolder/DeepLearning/fruit.py", line 58, in <module> model.fit(image_list, Y, epochs=1500, batch_size=100, validation_split=0.1) File "C:\Anaconda\lib\site-packages\keras\engine\training.py", line 1154, in fit batch_size=batch_size) File "C:\Anaconda\lib\site-packages\keras\engine\training.py", line 579, in _standardize_user_data exception_prefix='input') File "C:\Anaconda\lib\site-packages\keras\engine\training_utils.py", line 145, in standardize_input_data str(data_shape)) ValueError: Error when checking input: expected dense_1_input to have shape (1875,) but got array with shape (12288,)

エラーメッセージがこちらです。

該当のソースコード

python

1 2from keras.models import Sequential 3from keras.layers import Activation, Dense, Dropout 4from keras.utils.np_utils import to_categorical 5from keras.optimizers import Adadelta 6from keras.optimizers import Adam 7import numpy as np 8from PIL import Image 9import os 10from keras.utils import np_utils 11 12 13#学習用のデータセットを作る 14image_list = [] 15label_list = [] 16 17#./data/trainに以下の5yen 50yenディレクトリ以下の画像を読み込む 18for dir in os.listdir("data\train"): 19 dir1 = "data\train\" + dir 20 label = 0 21 22 if dir == "5yen": 23 label = 0 24 elif dir == "50yen": 25 label = 1 26 27 for file in os.listdir(dir1): 28 #配列label_listに正解ラベルを追加 29 label_list.append(label) 30 filepath = dir1 + "\" + file 31 #画像を64×64にし、RGBの値を読み込む 32 image = np.array(Image.open(filepath)) 33 print(filepath) 34 35 image = image.transpose(2, 0, 1) 36 image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] 37 image_list.append(image / 255.) 38 39#kerasに渡すためにnumpy配列に変更 40image_list = np.array(image_list) 41Y = np_utils.to_categorical(label_list) 42 43 44#モデルを生成して、ニュートラルネットワークを生成 45model = Sequential() 46model.add(Dense(200, input_dim=1875)) 47model.add(Activation("relu")) 48model.add(Dropout(0.2)) 49 50model.add(Dense(200)) 51model.add(Activation("relu")) 52model.add(Dropout(0.2)) 53 54model.add(Dense(2)) 55model.add(Activation("softmax")) 56 57opt = Adam(lr=0.001) 58model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) 59model.fit(image_list, Y, epochs=1500, batch_size=100, validation_split=0.1) 60 61#テスト用ディレクトリで正解率をチェックする 62total = 0. 63ok_count = 0. 64 65for dir in os.listdir("data\train"): 66 dir1 = "data\test\" + dir 67 label = 0 68 69 if dir == "5yen": 70 label = 0 71 72 elif dir == "50yen": 73 label = 1 74 75 for file in os.listdir(dir1): 76 label_list.append(label) 77 filepath = dir1 + "\" + file 78 image = np.array(Image.open(filepath)) 79 print(filepath) 80 image = image.transpose(2, 0, 1) 81 image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] 82 result = model.predict_classes(np.array([image / 255.])) 83 print("label:", label, "result", result[0]) 84 85 total += 1. 86 if label == result[0]: 87 ok_count += 1. 88 89 90print("seikai:", ok_count / total * 100, "%")

また、このコードは、Kerasによる、ものすごくシンプルな画像分類(りんごとオレンジ)というサイトを参考にさせてもらいました。

このサイトでは、25×25のサイズの画像を指定してますが、私のほうでは、64×64ですでに前処理が完了しています。

試したこと

ValueError: Error when checking input: expected dense_1_input to have shape (1875,) but got array with shape (12288,)

というエラーをググってみたところ、
kerasによる最終層の出力の設定というサイトの通りに

from keras.utils import np_utils

を追加し、

Y = to_categorical(label_list)

から、

Y = np_utils.to_categorical(label_list)

に変更しましたが、エラーは変わらないままでした。
どなたかご教授いただけるとありがたいです。
また、ディープラーニング初心者であるため、詳しく教えていただけるとありがたいです。
よろしくお願いします。

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

Windows10
python 3.6.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

25x25x3=1875
64x64x3=12288
だと思います。

python

1model.add(Dense(200, input_dim=1875))

python

1model.add(Dense(200, input_dim=12288))

ではないでしょうか?
エラーメッセージの数字を割り算してみただけです。
3はRGBの3チャンネルのことでしょうか。

投稿2020/02/13 13:16

PINTO

総合スコア351

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

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

退会済みユーザー

退会済みユーザー

2020/02/14 04:06

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問