🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Python

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

Q&A

解決済

1回答

2615閲覧

Sequential()のエラーについて

Kazuki_otsuki

総合スコア2

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/02/25 06:36

こんにちは、大槻和輝です。

今回KaggleのDigit Recongnizerに関するコードで不明なエラーが出てしまし、調べましたがどのように対処したらよいかわからず、投稿しました。

詳しく説明すると、特徴量とモデルの作成を行い、学習データを使用して結果を出力しました。それをもとにテスト用のデータを予測しようとしたのですが、不明なエラーが出てしまいました。
Seuential()関係だと思いますが、わからないで対処の仕方を教えてほしいです。よろしくお願いします。

エラーの箇所と説明文
箇所
history = model.predict(test_x)

説明文
ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found ndim=2. Full shape received: (32, 784)

Python

1#特徴量の作成 2 3import numpy as np 4import pandas as pd 5from sklearn.model_selection import KFold 6from tensorflow.keras.utils import to_categorical 7 8#データを読み込み、pandasのDataFrameに格納 9train = pd.read_csv('../input/digit-recognizer/train.csv') 10train_x = train.drop(['label'],axis=1) 11train_y = train['label'] 12test_x = pd.read_csv('../input/digit-recognizer/test.csv') 13 14#trainのデータを学習用と検証用に分ける 15kf = KFold(n_splits = 4,shuffle=True,random_state=123) 16tr_idx,va_idx = list(kf.split(train_x))[0] 17tr_x,va_x = train_x.iloc[tr_idx],train_x.iloc[va_idx] 18tr_y,va_y = train_y.iloc[tr_idx],train_y.iloc[va_idx] 19 20#画像のピクセル値を正規化 21tr_x,va_x = np.array(tr_x/255.0),np.array(va_x/255.0) 22 23#画像データの2階テンソルを3階テンソルに変換 24tr_x = tr_x.reshape(-1,28,28,1) 25va_x = va_x.reshape(-1,28,28,1) 26 27#正解ラベルをOne-hot表現に変換 28tr_y = to_categorical(tr_y,10) 29va_y = to_categorical(va_y,10) 30 31 32 33#モデルの作成 34from tensorflow.keras.models import Sequential 35from tensorflow.keras.layers import Dense,Dropout,Flatten 36from tensorflow.keras.layers import Conv2D,MaxPooling2D 37 38#Sequentialオブジェクト作成 39model = Sequential() 40 41#第1層:畳込み層 42model.add(Conv2D(filters=32,kernel_size=(5,5),padding='same',activation='relu',input_shape=(28,28,1))) 43 44#第2層:畳込み層 45model.add(Conv2D(filters=64,kernel_size=(7,7),padding='same',activation='relu')) 46 47#第3層:プーリング層 48model.add(MaxPooling2D(pool_size=(2,2))) 49 50#ドロップアウト 51model.add(Dropout(0.5)) 52 53#第4層:畳込み層 54model.add(Conv2D(filters=64,kernel_size=(5,5),padding='same',activation='relu')) 55 56#第5層:畳込み層 57model.add(Conv2D(filters=32,kernel_size=(3,3),padding='same',activation='relu')) 58 59#第6層:プーリング層 60model.add(MaxPooling2D(pool_size=(2,2))) 61 62#ドロップアウト 63model.add(Dropout(0.55)) 64 65#Flatten層 66model.add(Flatten()) 67 68#第7層:全結合層 69model.add(Dense(700,activation='relu')) 70model.add(Dropout(0.3)) 71 72#第8層:全結合層 73model.add(Dense(150,activation='relu')) 74model.add(Dropout(0.35)) 75 76#第10層:出力層 77model.add(Dense(10,activation='softmax')) 78 79#モデルのコンパイル 80#オプティマイザーはAdam 81momentum =0.5 82model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) 83 84#学習を使って結果を出力 85#ミニバッチのサイズ 86batch_size = 100 87#学習階数 88epochs = 20 89#学習を行う 90history = model.fit(tr_x,tr_y,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(va_x,va_y)) 91 92#結果 93Epoch 20/20 94315/315 [==============================] - 311s 987ms/step - loss: 0.0260 - accuracy: 0.9926 - val_loss: 0.0197 - val_accuracy: 0.9945 95 96history = model.predict(test_x)

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

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

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

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

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

guest

回答1

0

ベストアンサー

学習データや検証データに適用している前処理(正規化や次元変換)を、テストデータに適用し忘れています。

以下の部分ですね。エラーの直接原因は次元変換の方です。

Python

1#画像のピクセル値を正規化 2tr_x,va_x = np.array(tr_x/255.0),np.array(va_x/255.0) 3 4#画像データの2階テンソルを3階テンソルに変換 5tr_x = tr_x.reshape(-1,28,28,1) 6va_x = va_x.reshape(-1,28,28,1)

Kaggleの場合、学習データとテストデータを最初にpd.cocatしてから一気に前処理して、その後、学習データ・検証データ・テストデータに分離するのが、私としてはオススメです。前処理のし忘れを防止できますし、欠損値の補完などがより多くのデータをもとにできますので。

投稿2021/02/25 11:07

編集2021/02/25 11:39
toast-uz

総合スコア3266

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

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

Kazuki_otsuki

2021/02/26 03:21

ご回答ありがとうごさいます。 一度、アドバイス通りに試してみます。
Kazuki_otsuki

2021/02/26 07:50

無事にできました。 ありがとうごさいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問