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

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

ただいまの
回答率

90.52%

  • Python

    7929questions

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

  • Python 3.x

    6342questions

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

  • TensorFlow

    670questions

  • Keras

    206questions

TensorFlow流の奇妙

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 225

leilei

score 31

TensorFlowでコードを組む場合、所謂『計算グラフ』を作るのですけれども、
計算式の定義は皆"単一"の訓練データに対するもので、ところが、
loss関数の計算や最適化処理(学習)は本質的に複数の学習データ(eg., mini batch)に対して統計的に行わなければなければなりません。

ということは、TensorFlowが内部的にC言語のような『静的な変数』を使って
個々単一訓練データに対する計算結果を"暗黙のうち"に累積していくのでしょうか。

宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • _Victorique__

    2018/07/29 15:58

    誤差逆伝播はご存知ですか?

    キャンセル

  • leilei

    2018/07/30 20:24 編集

    お返答ありがとうございます。今質問として提起したのはbatch単位での誤差逆伝播をPython+TensorFlowで具体にどういうコード表現で実現したの?という話です。見かけ上scalarや単一データ計算のようですけれども、実際はmatrixで対応しています。これに関して私は誤解しました。R.Shigemori様の御かげでクリアできました!

    キャンセル

回答 2

+2

要は定義するパラメーターは単一だけれども、訓練に使うデータは複数あるから、パラメータ管理はどうなっているのという質問でしょうか?

ミニバッチなどで訓練データが複数あったとしても最適化するパラメータ自体は単一です。
ミニバッチ学習でしたら、通常は出力されたloss関数の平均値を用いて勾配を求めます。

単一の計算グラフを作れば、複数のデータが流されようとも、その計算グラフの変数を最適化すればいいので、それ以上の事は何も必要ないかと思います。

質問の意図と違うのであればすいません

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/30 20:18 編集

    お返答と丁寧な説明有難うございます。
    >単一の計算グラフを作れば、複数のデータが流されようとも、その計算グラフの変数を最適化すればいいので

    これに関してどうやって実現したの?という質問つもりです。

    ↑のR.Shigemori様が仰った通り、Pythonの計算はmatrix向きで、
    訓練データを結局matrixの形で計算式に渡され、matrix計算が行われ、batch(複数訓練データ)による更新が実現されたということですね。

    キャンセル

checkベストアンサー

+1

「計算式の定義は単一の訓練データに対するもの」という部分に誤解があるように思います。tesorflowのコードを見るとわかるように、データの件数は任意であり、一方のパラメータはひとつです。そして、計算グラフは、これらの複数件のデータを行列式を使って一括処理しています。その意味では「単一訓練データに対する計算結果を"暗黙のうち"に累積していく」というよりも明示的に一括で処理しているというほうが正しいかと思います。
なお、コスト関数は、この一括処理した結果の総合計をしています。その点では累積という表現は間違いではないかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/30 19:23 編集

    R.Shigemoriさん
    ご指導ありがとうございます。
    私が誤解していたと思います。
    tf.placeholder(...)の戻り値(変数)はscalarであり、それ以降の計算は全部このscalarに対して定義されるため
    私はTensorFlowにおいてloss等の定義が皆 "単一データ(scalar)"に関する計算だと, 勘違いしてしまいました!
    まずplaceholder(...)の戻り値(変数)は計算対象となるデータそのものではないですね。
    もう一つ思い込みとして、Pythonの四則計算はscalarであって、実際はmatrix対応。

    ★ ところで、tf.placeholder(...)の戻り値(変数)の正体は何でしょうか、
    runでパスしたデータ本体のアドレス? それとも、runで受容する変数の辞書のキーでしょうか?

    キャンセル

  • 2018/07/30 22:21

    placeholderの中身はrunを実行する際の引数であるfeeddictです。大抵はtesorを与えるので、以降の計算グラフはtesorのまま処理を進めます。

    かなりざっくりとした説明をすると、tesorflowのコードはpythonから見ると関数のようなものです。関数はそれそのものでは機能せず、mainのコードから呼ばれて機能します。この際、引数が渡されます。この引数のうち、入力データに相当するものがfeeddictです。ご存知の通り、関数の入力データは配列も許容され、大抵は全ての入力データに同じ処理が適用されます。これと同じように、tesorflowも与えられたtesorに同じ処理が適用されます

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    TFの線形問題で、パラメータの挙動について理解したい

    現在、tensorflowの勉強を進めており、一通りのコードの作法(session, runの役割など)等は学んだので、より深くステップごとに関数(及びメソッド)がどういう役割を果

  • 解決済

    ORの必要性

    ORがどうしてコード中に必要なのでしょうか? tf.reset_default_graph() x = tf.placeholder(tf.float32, name='x

  • 解決済

    「Deep MNIST for Experts」の質問

    TensorFlowのサイトにあるDeep MNIST for Expertsをやっているのですが、 わからないことがあり、質問させていただきます。 First Convolu

  • 解決済

    複数行にまたがる手書き文字列の認識方法

    質問のきっかけ 流行りに乗り、ディープラーニングを用いたアプリを作りたいと思った 手書き文字認識が面白そうだと思った やりたいこと 枠に囲まれた場所に書かれた

  • 解決済

    MNISTで学習後、実際の手書き文字を認識するために必要なこと

    MNISTで学習後、実際の手書き文字を認識したいと考えています。 下記のようなステップが必要と思いますが、合ってますでしょうか。 また、それぞれの方法を学ぶのに役立つサイトなどがあ

  • 解決済

    MNISTデータをreshapeできない

    前提・実現したいこと tensorflowでDCGANを使って画像生成するサンプルを自分のPCで動かそうとしています win10,anaconda(python3.5)で作業してい

  • 解決済

    ストライドがなぜ4次元なのか?

    CNNでMNISTデータを学習している以下を読んでいます https://www.tensorflow.org/get_started/mnist/pros 1.畳み込みやプー

  • 解決済

    mnist for ML Beginnersについて

    MNIST for ML Beginnersの中の学習についてよくわかりません batch_xs, batch_ys = mnist.train.next_batch(100)の部

同じタグがついた質問を見る

  • Python

    7929questions

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

  • Python 3.x

    6342questions

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

  • TensorFlow

    670questions

  • Keras

    206questions