Translate

2017年1月18日水曜日

TensorFlow の tf.strided_slice() を調べる

TensorFlow の チュートリアル RNN サンプルである ptb_word_lm.py を動かしてみたのだけど、

TypeError: strided_slice() missing 1 required positional argument: 'strides'

というエラーメッセージが表示され動作しない..

で、調べてみると..

strided_slice() missing 1 required positional argument: 'strides' #752

で読む限り、どうも tensorFlow 0.12になってから stride_slice()の引数strideを指定しないと動かないらしい..

ほかにも、困ってる人がいるみたい..

tensorflow0.12でcifar10を動かす時のエラー

CIFARのサンプルにも影響でてるのか..

tf.slided_slice() は多次元テンソルデータを矩形(?)に切り出す関数らしく、
下手にstrideを指定すると間違えるおそれがある..

ということで、TensorFlowの tf.stlide_slice()のドキュメントを勝手訳してみた。
----
tf.strided_slice(input_, begin, end, strides=None, begin_mask=0, end_mask=0, ellipsis_mask=0, new_axis_mask=0, shrink_axis_mask=0, var=None, name=None) {#strided_slice}


テンソルから、ストライドされたスライスを抽出します。

最初の順番では、この操作はテンソル `input` の `begin` から始まる位置から、サイズ `end - begin` のスライスを抽出します。スライス抽出は、すべての次元が `end`より小さくなるまで、` begin`インデックスに `stride` を追加することによって継続されます。ストライドのコンポーネントは負の値にすることができ、これは逆のスライスを引き起こすことに注意してください。

この操作は、numpyスタイルのスライスされた範囲のエンコーディングと考えることができます。Pythonスライス input[、...、] が与えられた場合、この関数は次のように呼び出されます。

`begin`、` end`、 `strides`はすべて長さ n になります。 n は一般に `input`と同じ次元ではありません。

i番目の仕様では、 `begin_mask`、` end_mask`、`ellipsis_mask`、` new_axis_mask`、`shrink_axis_mask`は、i番目の仕様に対応するi番目のビットを持ちます。

`begin_mask`のi番目のビットがゼロでない場合、` begin [i] `は無視され、そのディメンション内の可能な最大範囲が代わりに使用されます。
`end_mask`は、終了範囲を除いて同様に機能します。

7 x 8 x 9 型テンソルの `foo [5:、:、::3]`は `foo [5:7,0:8,0:3]`と同じです。
`foo [:: - 1]`は8のテンソルを逆転させます。

`ellipsis_mask`のi番目のビットが必要ならば、指定されていない次元数だけ他の次元の間に挿入されます。 `ellipsis_mask`には1つの非ゼロビットだけが許されます。

たとえば、 10 x 3 x 3 x 10 型テンソルの形の `foo [3:5, ...,4:5]``foo [3:5, :, :4:5]`と `foo [3:5, ...] `は` foo [3:5, :, :, :]]` と等価です。

`new_axis_mask`のi番目のビットが 1 の場合、` begin`、 `end`、` stride`は無視され、出力テンソルのこの時点で新しい長さ 1 次元が追加されます。

たとえば、 10 x 8 型テンソルの `foo [3:5,4]` は 2 型テンソルの形状を生成し、 `foo [3:5,4:5]` は `shrink_mask` が `1 << 1 == 2` の 2 x 1 型テンソルを生成します。

`shrink_axis_mask`のi番目のビットが 1 ならば、適切な次元でスライスを実行するために `begin` 、 `end [i]` 、 `stride [i]` が使われますが、出力テンソルは次元が 1 つ小さくなります。 これは、slice [i]i番目のエントリ== 1の場合にのみ有効です。


注: `begin`と` end` はゼロインデックス化されています。 `strides`エントリはゼロでなければなりません。


```python
# 'input' は [[[1, 1, 1], [2, 2, 2]],
#             [[3, 3, 3], [4, 4, 4]],
#             [[5, 5, 5], [6, 6, 6]]]
tf.strided_slice(input, [1, 0, 0], [2, 1, 3], [1, 1, 1]) ==> [[[3, 3, 3]]]
tf.strided_slice(input, [1, 0, 0], [2, 2, 3], [1, 1, 1]) ==> [[[3, 3, 3],
                                                               [4, 4, 4]]]
tf.strided_slice(input, [1, 1, 0], [2, -1, 3], [1, -1, 1]) ==>[[[4, 4, 4],
                                                                [3, 3, 3]]]

引数:



*  `input_`: `Tensor`.
*  `begin`: `int32` もしくは `int64` の `Tensor` 。
*  `end`:  `int32` もしくは `int64` の `Tensor` 。
*  `strides`: `int32` もしくは `int64` の `Tensor` 。
*  `begin_mask`: `int32` のマスク値。
*  `end_mask`: An `int32` のマスク値。
*  `ellipsis_mask`: `int32` のマスク値。
*  `new_axis_mask`: `int32` のマスク値。
*  `_masshrink_axisk`: `int32` のマスク値。
*  `var`: `input_` に関連する変数、もしくは None
*  `name`: operation (操作)名 (オプション)。


戻り値:


 `input`と同じ型の `Tensor` 。

0 件のコメント:

ClaudeをOpenAI O1のように思考させるDifyサンプルを試す

 Difyの「探索」タブにはさまざまなサンプルが載っており、その1つに「Thinking Claude (OpenAI O1 Alternative)」というものがある。   このサンプルがどういうものか、未だに自分でも解けない以下の問題をためしに聞いてみることにした。 『人類の...