Tensor - みる会図書館


検索対象: TensorFlowはじめました 3
13件見つかりました。

1. TensorFlowはじめました 3

print(array. get—shape()) reshaped—array = tf. reshape(array, [ 4 , 25 ] ) print(reshaped—array ・ get—shape()) with tf. Session() as sess: [ 4 , 2 の ) ( 4 , 25 ) ( 100 , ) リスト 1.5 の実行結果は次の通りです。 print(result) result = sess . run(reshaped—array) す。要素数が一致しない変形を指定するとエラーが発生します ( リスト 1.6 ) 。 変形の際、指定する形の合計は、変換の対象となる Tens 。 r の要素数と一致する必要がありま [ 4 , 25 ] に変わっています。 array として宣言した時点の Tensor の形は [ 1@@] でしたが、 tf. reshape を適用した後は [ 75 76 77 78 79 8@ 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 ] ] [ 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 ] [ 25 26 27 28 29 3@ 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ] [ [ 0 1 2 3 4 5 6 7 8 9 1@ 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ] リスト 1.6 の実行結果は次の通りです。 reshaped—array tf. reshape(array, print(array. get—shape()) array tf. range(), I@の リスト 1 .6 : 要素数の合わない変形 ' Reshape—1' (op: [ 10 の , 'Reshape') with input shapes: [ 2 ] and with input tensors com— VaIueError: Cannot reshape a tensor with 100 etements tO shape [ 4 , 20 ] ( 80 etements) for 省略した場合、 tf. reshape オペレーションは、変換の対象となる Tens 。 r の要素数が割り切 たとえば、 1 番目の次元数を 4 としたい場合、 [ 4 , ー 1 ] を指定します ( リスト 1.7 ) 。 2 番目の [ 4 , 25 ] のように指定していると、変換の対象となる Tens 。 r の要素数が変わるたびに修正 shapes: [ 4 , 20 ] . input[l] [ 4 , 2 の . れるように値を計算します。 次元数ー 1 が省略を表します。 する必要があります。その場合、形の一部を省略することができます。 input[l] puted as partiat shapes: 12 第 1 章 TensorFlow の基礎

2. TensorFlowはじめました 3

誤差関数の定義 第 2 章では、座標・確信度ともに MSE で誤差を求めていました。今回、座標については誤差 関数を smooth LI L 。 ss に変更します。 また、確信度の誤差関数に、 Hard Negative Mining を導入します。 Smooth LI Loss リスト 3.5 で実装している SmoothLlLoss は、引数 x の絶対値 (tf. abs) が 1 を超えている かどうかで出力の式が変わります ( 図 3.12 ) 。 図 3.12 : MSE と Smooth LI Loss MSE(Mean Squared E 「「 0 「 ) 80 60 20 0 ー 10.0 ー 5.0 ー 2.5 0.0 5.0 10.0 8 6 4 2 0 ー 10.0 ー 5.0 Smooth LI Loss 0.0 7.5 10.0 リスト 3.5 : train_ssd. py def _smooth—ll—loss(x) : return —smooth—ll—loss(offset) logits ー groundtruth offset def _toc_loss(togits, groundtruth) : tf. abs(x) abS X with tf. name_scope("smooth—ll") : less—mask) ☆ (abs—x ー @ ・ 5 ) return less—mask ☆ ( 0 . 5 ☆ tf. square(x)) \ tf. cast(abs—x く 1 . @ , tf. f10at32) less_mask less ー mask の部分が少しややこしいと思うかもしれませんが、このような手法は、 Tenso 「 Flow を使っていくと頻繁に遭 Tensor 日 ow での値の操作 ⅢⅢⅱⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅡⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅱⅢⅱⅢⅢⅢⅢⅢ 第 3 章物体認識奮闘記 65

3. TensorFlowはじめました 3

表 1 .1 : Tensor の Rank と Shape Rank Shape 1 DI] 2 CD@, DI, D2] 3 DI , 伊 > E Dimension 0 次元 1 次元 2 次元 3 次元 n 次元 713 [ 1.1 , 2 . 2 , 3 . 3 ] [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] . Dn-1] 表 1 .2 : Tensor のデータ型 ( 抜粋 ) python での型 tf . f10at32 tf . f10at64 tf . int8 t f . i nt16 t f . i nt32 tf . int64 tf. uint8 tf. uint16 tf. string tf . b001 解説 32 ビット浮動小数点形式 64 ピット浮動小数点形式 8 ピット整数 16 ビット整数 32 ビット整数 64 ピット整数 符号無し 8 ビット整数 符号無し 16 ピット整数 可変長文字列 真偽値 TensorFIow のウエプサイト 4 に、より詳細な表があります。 Rank が一致しないテンソルは演算できないなど、 Tensor に起因するエラーに遭遇すること は少なくありません。必要に応じて確認してください。 Tensor の操作 Tensor は、 Tens 。 r 同士の計算だけでなく、形を変えたり、一部を切り出したり、結合した り、さまざまな操作ができます。操作のオペレーションは、 Tens 。 rFl 。 w 特有のものを除けば、 NumPy と互換性を保つように開発されています。 変形 (reshape) 前述したように、 Tensor には「形」があります。 tf. reshape を使うと、これを変形できます。 リスト 1.5 では、 Rank 1 の Tensor を Rank3 に変換するオペレーション tf. reshape を実行 しています。 リスト 1 .5 : Tensor を変形 array = tf. range(@, TensorFIow の基礎 11 第 1 章

4. TensorFlowはじめました 3

print(mul—result) print(add—resuIt2) リスト 1.4 では、加算した結果に const2 を積算するオペレーション mul ー op を実行していま す。このオペレーションを図にすると図 12 のようになります。 図 1 .2 : tf. multiply に tf. add と const2 を人力 tf. add tf. multiply constl const2 実行結果は次の通りです。 15 5 1 .3 テンソル (Tensor) を取り出すことができます。 このように、セッションの中でグラフを構成するいずれかのオペレーションを実行して結果 たとえば画像データを表す場合、 Tensor の Rank は [ 3 ] 、 Shape は [width, height, channel] 、 にはデータ型 (Type) があります ( 表 1.2 ) 。 Rank は「テンソルの階数」、 Shape は「テンソルの形」を意味します ( 表 1.1) 。また、 Tensor Rank と Shape, Type 差し支えありません。 扱います。以後、 TensorFIow の文脈で触れる「 Tensor 」は、「 n 次元の多次元配列」と考えて TensorFIow は、グラフを構成するすべてのオペレーションを「 Tensor ( テンソル ) 」として 第 1 章 TensorFlow の基礎 ァータ型は tf. ui nt83 となります。 10

5. TensorFlowはじめました 3

( 15 , ) [ 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 ] 1 番目の軸以下を切り出したため、 sliced_arrayl の形は (15,) となっています。 : ] と、軸に : を指定することで、その軸についてはすべての要素を切り出すという指定 [ 3 , になります。 これらについては Python のスライス構文と同様です。詳細は、別途 Python のドキュメント を参照してください。 結合 (concatnate) Tens 。 r 同士を結合して、 1 つの Tens 。 r として取り扱うことができます。 リスト 1.9 では、要素数 60 の Tensor を tf. reshape で [4, 15 ] に変形しています。次に、 1 番目の軸について 1 番目 (index0) と 4 番目 (index3) の要素以下をすべて切り出しています。 最後に、切り出した sliced_arrayl と sliced_array2 を tf. concat オペレーションで結 合しています。 tf. concat オペレーションは 1 番目の引数に結合したい Tensor のリストを、 2 番目の引数 axis に、どの軸を基準に Tens 。 r を結合するかを指定します。 reshaped—array[3, s1iced_array2 sliced_arrayl reshaped—array[@, reshaped—array = tf. reshape(array, array tf. range(), 6@) リスト 1 .9 : Tensor を変形 たとえば、 ( 2 , 15 ) のような形の結果を得たい場合は、リスト 1.10 のようにします。 形が ( 15 , ) となったためです。 要素数 30 の Tensor ができています。これは、元の reshaped-array を切り出ししたときに 56 57 58 59 ] [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 45 46 47 48 49 50 51 52 53 54 55 ( 30 , ) リスト 1.8 の実行結果は次の通りです。 print(resutt) result sess . run(concat_array) with tf. Session() as sess: print(concat—array. get—shape() ) concat_array tf. concat( [sliced—arrayl, sIiced—array2] , axis=@) 14 第 1 章 TensorFlow の基礎

6. TensorFlowはじめました 3

Tensor("add 1:@" 3 3 3 , 4 ] ) 2 , 算できませんが、プロードキャスティングにより計算が可能になります。 リスト 1.18 のように、本来、一次元配列の arrayl とスカラーの valuel は、そのままでは計 スティングを使うと、形の異なる配列同士を自動的に変換して計算できます。 プロードキャスティング (Broadcasting) は、 NumPy5 で一般的な機能です。プロードキャ 1 .6 プロードキャスティング 置き換えられています。そのため、オペレーションを実行するまで値は得られません。 dtype=i nt32 ) であることに注意してください。演算子 + はオーバーロードで tf. add に shape=() , 度目の print(result2) で表示されるのが Tensor("add-1:@" resultl と resutt2 の結果は同じになりました。 nmport numpy as np リスト 1 . 1 8 : NumPy のプロードキャスティング shape=() , dtype=int32) arrayl valuel result np . a r ray ( [ 1 , 2 , 3 5 arrayl + valuel print(result) [ 6 7 8 9 ] TensorFlow にもプロードキャスティングの仕組みがあり、形の違う配列同士で演算するこ リスト 1 . 1 9 : TensorFlow のプロードキャスティング とができます ( リスト 1.19 ) 。 import tensorftow as tf 20 arrayl valuel result 第 1 章 tf. constant([l, tf. constant(5) TensorFlow の基礎 arrayl + valuel

7. TensorFlowはじめました 3

リスト 1 . 1 : 足し算 # coding: UTF—8 from from from import constl const2 add—op future futu re_ future_ import absotute_import import division import print—function tf. add(constl, const2) tf. constant(3) tf. constant(2) tensorflow as tf with tf. Session() as sess: sess . run(add—op) result print(result) では、リスト 1.2 はどうでしようか リスト 1.2 : add_op を print 文で表示 定数 constl と c 。 nst2 を加算しています。実行すると「 2 + 3 」の結果「 5 」が表示されます。 constl const2 add—op tf. constant(2) tf. constant(3) tf. add(constl, const2) print(add—op) shape=(), dtype=int32) Tensor("Add:@" ドを「オペレーション (Operation: op ) 」と呼びます。 グラフは Tensor オプジェクトの「ノード」で構成されます。 TensorFIow では、これらのノー 繰り返しになりますが、 TensorFlow の処理は「データフローグラフ」として構築します。 グラフとノード、オペレーション 同様です。そのまま print しても、計算結果の値は表示されません。 文字列が表示され、加算した結果は得られませんでした。定数 c 。 nstl や c 。 nst2 についても 8 第 1 章 TensorFlow の基礎

8. TensorFlowはじめました 3

目次 本書について・・ 本書の構成 前提知識 開発環境 検証環境・ ソフトウェアのノヾージョン・ サンプルコードの配布・サポート 表記関係について・・ 著作権について・・ 免責事項・ ライセンス・ 第 1 章 TensorFIow の基礎・ 1.1 TensorFlow とは・ 1.2 データフローグラフ・・ 1.3 テンソル (Tensor) 1.4 変数とプレースホルダー 1.5 演算子のオーバーロード・ 1.6 プロードキャスティング・・ 第 2 章グリッドベースの物体検出・ 2.1 物体検出とは・ 22 モデルの定義・ 2.3 データセットの作成 2.4 学習 ( 訓練 ) 2.5 検証・ 第 3 章物体認識奮闘記・・ 3.1 確信度と座標・・ 32 畳み込み層・・ 3.3 モデルの定義・ 3.4 データセットの再作成・ 1 1 1 っ朝 ワワ朝っ 0 8 0 8 ワワ朝ワ朝ワ朝 4 4 ・ 54 ・・ 54 冖 / 1 ワ朝 目次 2

9. TensorFlowはじめました 3

図 1 . 1 : グラフを構成するオペレーション tf. add constl const2 今回の場合、 const1,const2,add-op は、 python プログラム上では変数ですが、 TensorFIow ではデータフローグラフを構成するノード、つまり「オペレーション」です 2 。そのため print で中身を見ようとしても「 Tensor 」としか表示されません。 グラフの実行 構築したグラフの処理結果を得るには、セッション (tf. Session) の中で、結果を得たい オペレーションを実行 ( ru n) する必要があります。 ru n は、オペレーションが指定されると、そのオペレーションに接続されているグラフを処 リスト 1.3 は、オペレーション add ー op を実行しています。 理して、結果を NumPy の ndarray オプジェクトとして返します。 sess . run(add—op) result seSS tf. Session() リスト 1 .3 : add_op を実行 リスト 1 .4 : mul_op と add_op を実行 ともできます。 print(resutt) また、 run の引数にオペレーションのリストを渡せば、複数のオペレーションを実行するこ constl const2 add—op mul—op tf. constant(2) tf. constant(3) tf. add(constl, const2) tf. multiply(add—op, const2) with tf. Session() as sess: mut_resutt, add_result sess. run( [mut—op, add—op] ) 第 1 章 TensorFlow の基礎 9

10. TensorFlowはじめました 3

リスト 1 7 : 省略した変形 tf. range(), 6@) array print(array ・ get—shape()) reshaped—array tf. reshape(array, print(reshaped—array ・ get_shape()) with tf. Session() as sess: [ 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 ] ] [ 30 31 32 33 34 35 36 37 38 39 4@ 41 42 43 44 ] [ 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ] [ [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ] ( 4 , 15 ) ( 60 , ) リスト 1.7 の実行結果は次の通りです。 print(result) sess . run(reshaped—array) result 形の指定を省略した場合でも、変換対象となる Tens 。 r の要素数を割りきれない場合はエラー になります。また、省略が 2 つ以上ある場合 (e.g.[2@, 工ラーになります。 切り出し (slice) ー 1 ] ) も、値が計算できないため tf. slice を使うと、 Tens 。 r の要素の一部を切り出すことができます。 スライス構文で Tens 。 r の切り出す方法を紹介します。 こでは、 Python の リスト 1.8 は、要素数 60 の Tensor を tf. reshape で [4, 15 ] に変形しています。次に、 1 番目 の軸について 4 番目 (index3) の要素以下をすべて切り出しています。 with tf. Session() as sess: print(sliced—arrayl. get_shape() ) reshaped—array[3, sliced_arrayl reshaped—array = tf. reshape(array, array tf. range(), 6 の リスト 1 .8 : T so 「を変形 リスト 1.8 の実行結果は次の通りです。 print(result) sess. run(sliced_arrayl) resutt 第 1 章 TensorFlow の基礎 13