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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Q&A

解決済

1回答

20944閲覧

「Error when checking model input」のエラーで困っています

tsurutake

総合スコア13

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

0グッド

0クリップ

投稿2017/07/15 20:10

編集2017/07/16 12:35

###前提・実現したいこと
PythonでUnityのシミュレーターを動かしたいが、コンパイルできずに止まってしまっています。
エラーを解決してシュミレーションしたいです。

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

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-8-0c1d7921604c> in <module>() 33 34 model.compile(optimizer='adam', loss='mse') ---> 35 model.fit(X_train,y_train,validation_split=0.2,shuffle=True) 36 model.save('model.h5') C:\Users\kom\Anaconda3\envs\carnd-term1\lib\site-packages\keras\models.py in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs) 670 class_weight=class_weight, 671 sample_weight=sample_weight, --> 672 initial_epoch=initial_epoch) 673 674 def evaluate(self, x, y, batch_size=32, verbose=1, C:\Users\kom\Anaconda3\envs\carnd-term1\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch) 1115 class_weight=class_weight, 1116 check_batch_axis=False, -> 1117 batch_size=batch_size) 1118 # prepare validation data 1119 if validation_data: C:\Users\kom\Anaconda3\envs\carnd-term1\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size) 1028 self.internal_input_shapes, 1029 check_batch_axis=False, -> 1030 exception_prefix='model input') 1031 y = standardize_input_data(y, self.output_names, 1032 output_shapes, C:\Users\kom\Anaconda3\envs\carnd-term1\lib\site-packages\keras\engine\training.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 110 ' to have ' + str(len(shapes[i])) + 111 ' dimensions, but got array with shape ' + --> 112 str(array.shape)) 113 for j, (dim, ref_dim) in enumerate(zip(array.shape, shapes[i])): 114 if not j and not check_batch_axis: ValueError: Error when checking model input: expected flatten_input_7 to have 4 dimensions, but got array with shape (2279, 1)

###該当のソースコード(Python3.5)

Python3.5

1import csv 2import cv2 3import numpy as np 4 5lines = [] 6with open('./data/driving_log.csv') as csvfile: 7 reader = csv.reader(csvfile) 8 for line in reader: 9 lines.append(line) 10 11images = [] 12measurements = [] 13for line in lines: 14 source_path = line[0] 15 tokens = source_path.split('/') 16 filename = tokens[-1] 17 local_path = "\data\IMG\" + filename 18 image = cv2.imread(local_path) 19 images.append(image) 20 measurement = line[3] 21 measurements.append(measurement) 22 23X_train = np.array(images) 24y_train = np.array(measurements) 25 26import keras 27from keras.models import Sequential 28from keras.layers import Flatten, Dense 29 30model = Sequential() 31model.add(Flatten(input_shape=(160,320,3))) 32model.add(Dense(1)) 33 34model.compile(optimizer='adam', loss='mse') 35model.fit(X_train,y_train,validation_split=0.2,shuffle=True) 36model.save('model.h5')

###試したこと
1.Stackoverflowにて同じような問題があり、参考にしようとしましたが、解決方法が最後まで書いてありませんでした。
URL:https://stackoverflow.com/questions/42770997/error-when-checking-model-input-expected-flatten-input-8-to-have-4-dimensions
2.参考にしていた動画はMacでプログラミングしていたので、エラーが出ているファイルパスの箇所の「\」が問題だと思いましたが、Windowsとの違いが分かりませんでした。このエラーが発生する前のcsvファイルを読み込むところは動画内と同じでしたので、さほど違いがあるようには思えませんが、実際のところ良く分かっていません。
###補足情報(言語/FW/ツール等のバージョンなど)
Windoes7 64bit Professional

Youtube動画内キャプチャ画面

回答から以下を追記

3.「model.add(Flatten(input_shape=(160,320,3)))」→→→「model.add(Flatten(input_shape=(1,160,320,3)))」へ修正して再度コンパイルしてみました。すると
「Error when checking model input: expected flatten_input_1 to have 5 dimensions, but got array with shape (1888, 1)」とエラーが表示され、dimensionsが異なっていることが分かりました。
上記の画像のファイルパスと「X_train」の中身を確認してみました。すると
---↓↓↓ファイルパス↓↓↓---
./data/IMG/C:\Users\kom\AnacondaProjects\CarND-Behavioral-Cloning-P3-master\data\IMG\center_2017_07_16_16_26_04_663.jpg
./data/IMG/C:\Users\kom\AnacondaProjects\CarND-Behavioral-Cloning-P3-master\data\IMG\center_2017_07_16_16_26_04_766.jpg
[None None None ..., None None None]
---↑↑↑X_trainの中身↑↑↑---
が出力されました。これはX_trainをresizeしなければならないのでしょうか。
大変恐縮でございますが、ご指導頂きたく。ご回答の程宜しくお願いします。

自己解決しました。以下に内容を述べます。
###自己解決したソースコード(Python3.5)

Python3.5

1import csv 2import cv2 3import numpy as np 4import keras 5from keras.models import Sequential 6from keras.layers import Flatten, Dense 7 8lines = [] 9with open('C:/Users/kom/Desktop/data/driving_log.csv') as csvfile: 10 reader = csv.reader(csvfile) 11 for line in reader: 12 lines.append(line) 13 14images = [] 15measurements = [] 16for line in lines: 17 source_path = line[0] 18 filename = source_path.split('\\')[-1] 19 current_path = "C:/Users/kom/Desktop/data/IMG/" + filename 20 image = cv2.imread(current_path) 21 images.append(image) 22 measurement = float(line[3]) 23 measurements.append(measurement) 24 25X_train = np.array(images) 26y_train = np.array(measurements) 27 28model = Sequential() 29model.add(Flatten(input_shape=(160,320,3))) 30model.add(Dense(1)) 31 32model.compile(optimizer='adam', loss='mse') 33model.fit(X_train,y_train,validation_split=0.2,shuffle=True, nb_epoch=10) 34model.save('model.h5')

変更箇所は以下の2点です。若干コードの中身は変わっています。参考にした動画はMacからAWSを使用していましたが、自分のPCはWindowsを使用していたので、ファイルパスの指定がcsvとファイルでは異なることにピンときて修正したところコンパイルできました。
1.(変更前)with open('./data/driving_log.csv') as csvfile:
(変更後)with open('C:/Users/(自分のPCユーザー名)/Desktop/data/driving_log.csv') as csvfile:
2.(変更前)local_path = "\data\IMG" + filename
(変更後)current_path = "C:/Users/kom/Desktop/data/IMG/" + filename
無事シミュレーターに反映されたので、とりあえず一安心です。

-以上-

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

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

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

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

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

guest

回答1

0

ベストアンサー

タイトルとエラーメッセージの内容が違っているので、そこから見直した方が良さそうに思います。
(パスの違いの修正は必要だったかもしれませんが、少なくとも今出ているエラーは別件と思われます)

ValueError: Error when checking model input: expected flatten_input_7 to have 4 dimensions, but got array with shape (2279, 1)

「値のエラー: modelへの入力データをチェックしたとき、flatten_input_7は4次元のデータを期待したけれども、与えられたデータは (2279, 1) のデータだった。」

例外を発生させている箇所のコード
https://github.com/fchollet/keras/blob/master/keras/engine/training.py#L123 を見てもflatten_input_7がなにか分かりませんでしたが、少なくとも、今与えているデータ model.fit(X_train,y_train,validation_split=0.2,shuffle=True) のX_trainは2次元のようなので、model.fit関数に渡す値の形式が違っている可能性があります。

StackOverflowのコメントにも「X_train should be (1,160,320,3)」と4次元データを渡すべき、という答えがあるので、これが解決方法でしょう。

投稿2017/07/16 00:30

shimizukawa

総合スコア1847

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

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

tsurutake

2017/07/16 07:44

「model.add(Flatten(input_shape=(160,320,3)))」→→→「model.add(Flatten(input_shape=(1,160,320,3)))」へ修正して再度コンパイルしてみました。すると 「Error when checking model input: expected flatten_input_1 to have 5 dimensions, but got array with shape (1888, 1)」とエラーが表示され、dimensionsが異なっていることが分かりました。 上記の画像のファイルパスと「X_train」の中身を確認してみました。すると ---↓↓↓ファイルパス↓↓↓--- ./data/IMG/C:\Users\kom\AnacondaProjects\CarND-Behavioral-Cloning-P3-master\data\IMG\center_2017_07_16_16_26_04_663.jpg ./data/IMG/C:\Users\kom\AnacondaProjects\CarND-Behavioral-Cloning-P3-master\data\IMG\center_2017_07_16_16_26_04_766.jpg [None None None ..., None None None] ---↑↑↑X_trainの中身↑↑↑--- が出力されました。これはX_trainをresizeしなければならないのでしょうか。 大変恐縮でございますが、ご指導頂きたく。ご回答の程宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問