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

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

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

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

Python 3.x

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

機械学習

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

Python

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

Q&A

解決済

1回答

736閲覧

TensorFlow流の奇妙(二)

leilei

総合スコア39

深層学習

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

Python 3.x

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

機械学習

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

Python

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

1グッド

1クリップ

投稿2018/08/05 00:42

編集2018/08/05 00:43

暑中お見舞い申し上げます。

TensorFlow流のやり方では、下記のようなパターンはよくありますね。
(↓うまく実行できる実例です)

Python

1a = tf.placeholder(tf.float32) 2b = tf.placeholder(tf.float32) 3 4adder_node = a + b # + provides a shortcut for tf.add(a, b) 5sess.run(adder_node, {a:3, b:4.5})) 6sess.run(adder_node, {a: [1,3], b: [2,4]}) 7

さて、上の『a』と『b』の正体は一体何なんでしょうか。

① 変数のアドレス? 
そうでもないようです。
最後の二つのsess.run文から分かるように、aとbに対応する中身のサイズが全然変動的ですから。

② 辞書のキー?  
最後の二つのsess.run文の中に{a: ..., b: ...}のように使われているから、辞書のキーの可能性が高いですね。

でも、tf.placeholderって辞書のキーを生成して返すの?
そしてもし、『a』と『b』が辞書のキーであれば、直接この辞書のキーを使って計算(a+b)ができるの? これはPython仕様?

難しいかもしれませんが、ヒントやアイディアを頂ければ幸いです。

oookabe👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

基本的にtensorflowを用いた実装は、あらかじめ計算グラフと呼ばれる一連の処理をtensorflowの関数を用いて記述しておき、python側からその計算グラフを起動させることで実行されます。質問の例示のコードでいうと、計算グラフに相当する部分は

a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) adder_node = a + b

であり、sess.runの部分がpython側からの計算グラフの起動部分にあたります。例示の計算グラフの場合、a+bという加算を行うことがその実体ですが、計算に必要なa,bは外部から与える仕様として定義されています。したがって、sess.runによって起動する際、外部から与えるべきデータを引数として指定する必要があります。その内容、例示コードの {a:3, b:4.5}や{a: [1,3], b: [2,4]}の部分にあたります。

つまり、a,bはtensorflow内で処理される計算グラフ(adder_node = a + b)をpython側から実行するために必要なデータを指定したものということになります。

投稿2018/08/05 16:10

R.Shigemori

総合スコア3376

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

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

leilei

2018/08/06 02:54 編集

R.Shigemoriさま ご解説ありがとうございます。 戻り値であるaとbの存在は変数の如き、参照の仕方はPythonの辞書のキーである。。。 そして直接計算に利用されるので、辞書のキーであるはずはない。。。 もしかして、aとbはPython言語レベルのものではなく、 『tensorflow内』にのみ意味があるC言語のマクロやMATLABのsymbolic記号のようなものでしょうか。
R.Shigemori

2018/08/06 03:44

tensorflowはpythonとは別ものと捉えていたほうがしっくりくると思います。そして、この両者のインターフェースに相当するものがsess.runであり、pythonからtesorflowにデータを与える方法が第2引数であり、python側が受け取りたい計算結果が第1引数と理解しておけば、大抵の処理は実装できます。
leilei

2018/08/09 02:10

R.Shigemori さん お丁寧な解説ありがとうございます。 tensorflowの使い方は分かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問