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

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

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

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

Python 3.x

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

機械学習

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

Python

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

Q&A

解決済

3回答

140閲覧

tensorFlowの基本的なやり方・考え方

oookabe

総合スコア126

深層学習

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

Python 3.x

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

機械学習

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

Python

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

2グッド

1クリップ

投稿2018/02/21 02:27

編集2018/02/21 12:47

こんにちは!
tensorFlowでNNを訓練する時に、下記のような表現が良くあります。
train_X = d_train[[0,1,2,3,4,5,6]]
train_Y = d_train[[7]]

x = tf.placeholder(tf.float32, [None, 7])
y = tf.placeholder(tf.float32, [None, 1])

num_epochs = 10
for i in range(num_epochs):
...sess.run(optimizer, feed_dict={x:train_X, y:train_Y}) #⇐此処に問題!

この例では forの10回循環を実行しますが、
毎回変数train_Xとtrain_Yの内容が変わるのでしょうか。
d_trainが固定内容なので、train_Xの中身も、train_Yの中身もこのfor文に更新されるのを感じもしないのです。なので、X,Yにindexされるデータも毎回変わらないので、10回ループしても
意味がないじゃないかと、、、

文中の「...」はindentを表し、この掲示板の表示は勝手にスペースやindentを無くすため。
ヒントでも宜しくお願い致します。

umyu👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/02/21 03:03

インデントの崩れは`を三つずつソースコードのブロック前後に置けば大丈夫ですよ。
退会済みユーザー

退会済みユーザー

2018/02/21 03:48 編集

失礼ちょっと間違った質問をしました
oookabe

2018/02/21 12:27

ご教授有難う御座います
guest

回答3

0

ベストアンサー

質問に対する回答はなされているので、関連する情報を提供します。

まず、num_epochs = 10ですが、これはepochという学習を行う単位を基準にした学習回数の定義を意味しています。この学習単位ですが、いくつかのバリエーションがあります。メジャーなものとして、まずバッチ学習があげられます。これは与えられたデータ全件を一括で行うことを1単位とするというもので、質問に記載されているコードはバッチ学習を意味しています。もうひとつはミニバッチ学習と呼ばれるもので、与えられたデータをもう少し小さい単位に分割して全件の学習を行うことを1単位とするものです。mkgreiさんの示すコードはこのミニバッチ学習の一部分を示しています。
学習という処理は、optimaizerが定義された方法に基づき少しだけウェイトとバイアス(まとめてパラメータと呼ぶ)を更新することを意味しています。したがって、1回の計算では結果を得ることはできないのでnum_epochsで学習回数を定義する必要があります。
学習はあらかじめ定義したコスト関数の結果をもとに行われます。同じデータであってもコスト関数の結果が満足のいくものでなければパラメータの更新は継続されます。よって同じデータを投入しても学習自体は進むことになります。
私は、バッチ学習はパラメータの更新が安定的であることが特徴ととらえています。安定的とはおおよそ同じ方向に学習が進んでいくというイメージです。安定的であることは必ずしもいいこととは限りません。むしろ、n回目の学習時のデータとn+1回目のデータの分布構造が異なっているほうが大胆にパラメータを更新してくれたりするので、結果としていい感じに学習が進むことがあると理解しています。ただし、そもそものデータに不均衡があるような場合(例えば、ある説明変数が0と1で構成され、0が1万件に対して1が100件)、ミニバッチの作成より1が0件という状態が連続するような状態も起こりえます。こうした場合、コスト関数の結果がパラメータの更新前と後で変化がないことが起こりえるので、結果として学習がうまく進まないということになると思っています。

投稿2018/02/21 11:20

R.Shigemori

総合スコア3376

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

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

oookabe

2018/02/21 12:30

親切なご解説本当に有難う御座います。 勉強になりました!
oookabe

2018/02/21 13:22

1.「バッチ学習」と「ミニバッチ学習」 2.optimaizerが定義された方法に基づき少しだけウェイトとバイアス(まとめてパラメータと呼ぶ)を更新する 3.※ 同じデータであってもコスト関数の結果が満足のいくものでなければパラメータの更新は継続されます。よって同じデータを投入しても学習自体は進むことになります。※ これ! 4.むしろ、n回目の学習時のデータとn+1回目のデータの分布構造が異なっているほうが大胆にパラメータを更新してくれたりするので、結果としていい感じに学習が進むことがある 5.データに不均衡があるような場合、、、、 どれも金科玉条です! 全部丸ごと覚えたいですね。
guest

0

意味があるかどうかは目的次第かと思います。例えd_train[[0,1,2,3,4,5,6]]を使ってd_train[[7]]だけにfitさせたいと言うであれば、載せていただいたコードはその目的にかなっています。ただ、これだと(仮にどりたも複数のデータセットだとしても)全てのデータを計算してから重みが一回だけ更新されるので、学習効率が悪いことが知られています。

ですので、普通は入力train_Xと出力train_Yを小さなまとまり(バッチ、と呼ばれます)に分割して、小さなステップでNNを最適化します。これは確率的勾配法と呼ばれます。その場合は例えばmkgreiさんが提示してくれたコードのようにfeed_dictに食わせるデータを変えながらsess.runを呼び出して行きますよ。

投稿2018/02/21 03:57

編集2018/02/21 13:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

oookabe

2018/02/21 13:33 編集

丁寧なご解説有難う御座います。 バッチ化(いや、「ミニバッチ化」)の意義ですね、良く分かりました! 誤植と思いますが「確率的購買法」⇨「確率的勾配法」でしょう。 この場合の「確率的」とは何を指しているのでしょうか。
退会済みユーザー

退会済みユーザー

2018/02/21 13:19

確率的・・・というより、当てずっぽう、くらいに捉えていいと思います。このあたりの記事を見てもらうほうがよさそうです。私の説明では、確率的勾配降下法とミニバッチ勾配降下法を間違えておりました。 http://postd.cc/optimizing-gradient-descent/
oookabe

2018/02/21 13:27

**これだと(仮にどりたも複数のデータセットだとしても)全てのデータを計算してから重みが一回だけ更新されるので、学習効率が悪いことが知られています。 ** ポイント!
guest

0

https://teratail.com/help
コードの入力の仕方が書いてあります。

例示しているコードでは変わっていません。
https://www.tensorflow.org/versions/r1.1/get_started/mnist/beginners
チュートリアルでも同様のコードがあります。

python

1for _ in range(1000): 2 batch_xs, batch_ys = mnist.train.next_batch(100) 3 sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

for文が回るたびにバッチの中身を変更していたりします。

投稿2018/02/21 03:10

mkgrei

総合スコア8560

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

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

oookabe

2018/02/21 13:31

ごめんなさい!念のために 「例示しているコードでは変わっていません。」とはfor ループの 訓練データがずーと更新せずにループを続けられたということですね。
mkgrei

2018/02/21 14:06

おっしゃるとおりです。 訓練データ(教師データ)が順番含めて全く同じです。 モデルの中のパラメータだけが変化しています。
oookabe

2018/02/22 00:41

本当に有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問