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

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

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

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

深層学習

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

機械学習

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

Python

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

Q&A

解決済

2回答

995閲覧

kerasの60000ある訓練データを96しか学習しない「AlphaZore 人工知能プログラミング実践入門」

0990

総合スコア8

Keras

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

深層学習

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/01/05 12:46

編集2021/01/05 12:56

python

1print(train_images.shape) 2print(train_labels.shape)
(60000, 784) (60000, 10)

となってkerasからサンプルデータを取り出して前処理した時には60000あるデータですが、訓練すると

python

1model = Sequential() 2model.add(Dense(256, activation='sigmoid', input_shape=(784,))) 3model.add(Dense(128, activation='sigmoid')) 4model.add(Dropout(rate=0.5)) 5model.add(Dense(10, activation='softmax')) 6 7model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.1), metrics=['acc']) 8 9history = model.fit(train_images, train_labels, batch_size=500, 10 epochs=5, validation_split=0.2) 11
Epoch 1/5 96/96 [==============================] - 1s 6ms/step - loss: 2.0732 - acc: 0.2885 - val_loss: 1.0056 - val_acc: 0.8280 Epoch 2/5 96/96 [==============================] - 0s 5ms/step - loss: 1.0491 - acc: 0.7057 - val_loss: 0.5946 - val_acc: 0.8853 . . .

となって96しか訓練できていません。書籍の内容を貼り付けているのでコードに間違いはありません。
環境はGoogle Coladを使用しています。
書籍では同じコードで

Train on 48000 samples, validate on 12000 samples Epoch 1/5 48000/48000 [==============================] - 2s 36us/sample - loss: 1.6872 - acc: 0.4570 - val_loss: 0.9593 - val_acc: 0.8463 Epoch 2/5 48000/48000 [==============================] - 2s 35us/sample - loss: 0.9088 - acc: 0.7503 - val_loss: 0.5725 - val_acc: 0.8845 . . .

とゆう結果が出力されます。最初のTrain on 48000,,,とゆう部分も出力されません。
「AlphaZore 人工知能プログラミング実践入門」とゆう本の一番最初の部分です。
コードはそのままだしGoogle Coladの設定も最初のままなので何が原因かわかりません。
わかる方がいれば教えてください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

書籍を購入または読んだことがないので、個人的解釈の元、回答させて頂きます。
結論から申しますと、期待する結果と同様の結果が欲しいのでしたら、

python

1history = model.fit(train_images, train_labels, batch_size=1, epochs=5, validation_split=0.2)

で同様の結果が得られるのではないでしょうか。
batch_size, validation_splitの関係は以下の様になっています。

math

160000(画像総数) = 96(出力結果)*500(batch_size) + 60000(画像総数)*0.2(validation_split)

また、デフォルトではbatch_sizeは32となっていることにも注意が必要です。

投稿2021/01/05 14:03

HelloQ

総合スコア81

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

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

0990

2021/01/05 15:14

コメントありがとうございました。 解決しました。
guest

0

model.fit()で以下の設定になっています。

  • batch_size=500で500個同時に学習している
  • validation_split=0.2で総データのうち20%をtestに回している

上記より、60000×0.8÷500で96回分となります。
従って「96個しか使われない」という考えが間違いで、全てのデータがtrainまたはtestのどちらかに使われています。
(書籍と違う理由はよく分かりませんが、挙動としては間違っていないはずです)

投稿2021/01/05 13:08

fiveHundred

総合スコア10152

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

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

jbpb0

2021/01/05 13:18

https://teratail.com/questions/259762 の回答には、「fit() で学習した場合はサンプル数、fit_generator() で学習した場合は1エポックあたりの反復回数」って書いてあるけど、質問者さんの環境ではそうなってないですね kerasの仕様が変わったのかな??
0990

2021/01/05 13:41

コメントありがとうございます。 試しに batch_size=500 を消してみたんですが、 Epoch 1/5 1500/1500 [==============================] となりました。4800-1500はどこにいったのでしょうか? 後、学習過程の誤差や正解率が違うは何故でしょうか?テンプレートのデータは同じだと思いますが、、、
jbpb0

2021/01/05 14:52 編集

> 学習過程の誤差や正解率が違うは何故でしょうか? 乱数使ってますからね 全く同じコードでもう一回やったら、また変わりませんか? (やる度に毎回変わる)
0990

2021/01/05 14:59

コメントありがとうございます。 おかげで納得できました。 正解率を評価をする時 test_loss, test_acc = model.evaluate(test_images, test_labels) で出力が書籍では 10000/10000 [==============================] なのですが 自分のPCでは 313/313 [==============================] となるのですがこの313はどこからきた数値でしょうか?
jbpb0

2021/01/05 15:17 編集

10000/32 model.evaluate()も、指定しないとbatch_size=32なので
0990

2021/01/05 15:13

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問