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

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

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

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

Python

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

Q&A

解決済

2回答

1745閲覧

kerasで正解率がゼロ

nouken

総合スコア369

Keras

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

Python

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

0グッド

1クリップ

投稿2018/11/07 08:28

編集2018/11/07 08:44

KerasでNNによるモデルを構築しようとしています。

特徴量は243個のバイナリーデータで、二値分類問題です。

とりあえず適当に予測してみようと思い、以下を実行しました。

python

1 2 3from sklearn.model_selection import train_test_split, KFold 4from keras.models import Sequential 5from keras.layers import Dense, Activation 6from keras.optimizers import SGD, Adadelta, Adam 7from keras.callbacks import EarlyStopping 8 9 10kf=KFold(n_splits=5, random_state=1) 11loss_list=[] 12acc_list=[] 13for train_idx, val_idx in kf.split(x_sampled): 14 x_train, x_val=x[train_idx], x[val_idx] 15 y_train, y_val=y[train_idx], y[val_idx] 16 17 model=Sequential() 18 model.add(Dense(units=100, input_dim=len(x[0]))) 19 model.add(Activation('sigmoid')) 20 model.add(Dense(units=50, input_dim=100)) 21 model.add(Activation('sigmoid')) 22 model.add(Dense(units=10, input_dim=50)) 23 model.add(Activation('sigmoid')) 24 model.add(Dense(units=1)) 25 26 model.compile(optimizer='Adam', loss='binary_crossentropy', metrics=['accuracy']) 27 28 history=model.fit(x_train, y_train, epochs = 100, batch_size = 32, validation_data = (x_val, y_val), callbacks = [EarlyStopping()]) 29 30 score=model.evaluate(x_val, y_val, verbose = 0) 31 loss_list.append(score[0]) 32 acc_list.append(score[1]) 33 34print('loss avg is {}'.format(np.mean(loss_list))) 35print('acc avg is {}'.format(np.mean(acc_list)))

この結果なのですが、

python

1Train on 368 samples, validate on 92 samples 2Epoch 1/100 3368/368 [==============================] - 1s 3ms/step - loss: 0.5381 - acc: 0.7799 - val_loss: 0.1971 - val_acc: 1.0000 4Epoch 2/100 5368/368 [==============================] - 0s 157us/step - loss: 0.5045 - acc: 0.7799 - val_loss: 0.2338 - val_acc: 1.0000 6Train on 368 samples, validate on 92 samples 7Epoch 1/100 8368/368 [==============================] - 1s 3ms/step - loss: 0.6302 - acc: 0.5951 - val_loss: 0.5771 - val_acc: 0.7717 9Epoch 2/100 10368/368 [==============================] - 0s 141us/step - loss: 0.4722 - acc: 0.8370 - val_loss: 0.5404 - val_acc: 0.7717 11Epoch 3/100 12368/368 [==============================] - 0s 130us/step - loss: 0.4451 - acc: 0.8370 - val_loss: 0.5288 - val_acc: 0.7717 13Epoch 4/100 14368/368 [==============================] - 0s 136us/step - loss: 0.4172 - acc: 0.8370 - val_loss: 0.5713 - val_acc: 0.7717 15Train on 368 samples, validate on 92 samples 16Epoch 1/100 17368/368 [==============================] - 1s 3ms/step - loss: 2.5404 - acc: 0.0054 - val_loss: 4.0295 - val_acc: 0.0000e+00 18Epoch 2/100 19368/368 [==============================] - 0s 138us/step - loss: 2.5404 - acc: 0.0054 - val_loss: 4.0295 - val_acc: 0.0000e+00 20Train on 368 samples, validate on 92 samples 21Epoch 1/100 22368/368 [==============================] - 1s 3ms/step - loss: 2.8031 - acc: 0.8261 - val_loss: 2.9783 - val_acc: 0.8152 23Epoch 2/100 24368/368 [==============================] - 0s 148us/step - loss: 2.8031 - acc: 0.8261 - val_loss: 2.9783 - val_acc: 0.8152 25Train on 368 samples, validate on 92 samples 26Epoch 1/100 27368/368 [==============================] - 1s 4ms/step - loss: 2.6717 - acc: 0.8342 - val_loss: 3.5039 - val_acc: 0.7826 28Epoch 2/100 29368/368 [==============================] - 0s 149us/step - loss: 2.6717 - acc: 0.8342 - val_loss: 3.5039 - val_acc: 0.7826 30loss avg is 2.263390034566755 31acc avg is 0.6739130434782609 32 33 34

となり、accがゼロ付近のまま終わってしまっているfoldがあります。
この理由として考えられることはどんなものがあるでしょうか?
NN初心者のため、ヒントだけでもいただければ幸いです。

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

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

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

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

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

tiitoi

2018/11/07 08:39

一部ではなく、コピペすれば動くコード全体を貼ってください。
nouken

2018/11/07 08:45

ありがとうございます。あとは、データさえあればうごくはずなのですが・・・
guest

回答2

0

KFoldにshuffle=Trueを渡してみてください。
データが整列されていることが問題ではないでしょうか?


yが必要になるのはStratifiedKFoldでは。

投稿2018/11/07 11:30

編集2018/11/07 11:31
mkgrei

総合スコア8560

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

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

nouken

2018/11/07 11:54

現在手元にデータがないので、明日試してみます。ありがとうございます!
guest

0

ベストアンサー

原因かどうかはわかりませんが、教師あり学習なら kf.split() に X だけでなく Y も渡すべきではないでしょうか?
一応以下のコードで質問のような現象は確認できませんでした。

python

1import numpy as np 2from sklearn.model_selection import KFold 3from sklearn.datasets import make_classification 4from keras.models import Sequential 5from keras.layers import Dense, Activation 6from keras.callbacks import EarlyStopping 7 8# データを作成する。 9X, Y = make_classification(n_samples=1000, n_features=20, n_classes=2) 10print(X.shape, Y.shape) # (1000, 20) (1000,) 11 12kf = KFold(n_splits=5, random_state=1) 13 14loss_list=[] 15acc_list=[] 16 17for train_idx, val_idx in kf.split(X, Y): 18 X_train, X_val = X[train_idx], X[val_idx] 19 Y_train, Y_val = Y[train_idx], Y[val_idx] 20 21 model = Sequential() 22 model.add(Dense(units=100, activation='sigmoid', input_dim=len(X[0]))) 23 model.add(Dense(units=50, activation='sigmoid')) 24 model.add(Dense(units=10, activation='sigmoid')) 25 model.add(Dense(units=1, activation='sigmoid')) 26 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) 27 model.fit(X_train, Y_train, epochs=100, batch_size=32, verbose=0, 28 validation_data=(X_val, Y_val), callbacks=[EarlyStopping()]) 29 30 loss, acc = model.evaluate(X_val, Y_val, verbose=0) 31 loss_list.append(loss) 32 acc_list.append(acc) 33 34print('loss_list', loss_list) 35print('acc_list', acc_list) 36print('loss avg is {}'.format(np.mean(loss_list))) 37print('acc avg is {}'.format(np.mean(acc_list)))
loss_list [0.2805235469341278, 0.18625244736671448, 0.19603977024555205, 0.19513042390346527, 0.22721632838249206] acc_list [0.895, 0.955, 0.95, 0.935, 0.935] loss avg is 0.21703250336647031 acc avg is 0.9339999999999999

投稿2018/11/07 09:12

tiitoi

総合スコア21956

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

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

nouken

2018/11/07 10:43

なるほど気づきませんでした。今は手元にデータがないので、明日とりあえずそれを試してみます。わざわざ試していただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問