テンソル内の要素の数を取得したいとします。たとえば、t = [1,2,0,0,0,0](tはテンソル)、私は、Pythonでt.count(0)を呼び出すことによって '0'の量を得ることができますが、テンソルフローでは、私はこれを行うための関数を見つけることができません。どうすれば '0'のカウントを得ることができますか?誰かが私を助けてくれますか?テンソル内の要素の数を取得する方法
答えて
現在、テンソルフローに組み込みカウント方法はありません。しかし、次のような方法で既存のツールを使用して行うことができます。
def tf_count(t, val):
elements_equal_to_value = tf.equal(t, val)
as_ints = tf.cast(elements_equal_to_value, tf.int32)
count = tf.reduce_sum(as_ints)
return count
、リターンvalut「数」はテンソルである、私はこれを比較することはできませんたとえば、int32を使用しています。グラフのtf_count(t、val)<6: 'ならば、これはエラーになります。 'sess.run() 'を実行せずに戻り値をint32で区切る方法はありますか?ありがとう。 –
いいえ、それはテンソルの流れがどのように作用するのですか、物事はsession.runを通過するまでテンソルです。グラフの中を走り続けたい場合は、tf.less(tf_count(t、val)、6)を使うことができますが、結果にテンソルがあります。 –
サルター、それを使って、私はそれを断念することに決めました。あなたの親切な助けをありがとうございます:) –
上記のスレーターの答えに加えて。 の数をすべての要素にする場合は、one_hot
とreduce_sum
を使用して、Python内でのループを避けることができます。たとえば、以下のコードスニペットは、word_tensor内のオカレンスによって順序付けられたボキャブを返します。
def build_vocab(word_tensor, vocab_size):
unique, idx = tf.unique(word_tensor)
counts_one_hot = tf.one_hot(
idx,
tf.shape(unique)[0],
dtype=tf.int32
)
counts = tf.reduce_sum(counts_one_hot, 0)
_, indices = tf.nn.top_k(counts, k=vocab_size)
return tf.gather(unique, indices)
EDIT:少し実験をした後、私はそれがTFの最大テンソルのサイズを超えて爆破するone_hot
テンソルのために非常に簡単です発見しました。 (少しエレガントな場合)には、このようなものでcounts
コールを交換する可能性がより効率的です。
counts = tf.foldl(
lambda counts, item: counts + tf.one_hot(
item, tf.shape(unique)[0], dtype=tf.int32),
idx,
initializer=tf.zeros_like(unique, dtype=tf.int32),
back_prop=False
)
あなたはテンソルt
にn
までのすべての整数のカウントを取得したい場合は、あなたのようtf.unsorted_segment_sum使用することができますこれは:
count_all = tf.unsorted_segment_sum(tf.ones_like(t), t, n)
count_all
がヒストグラムになります。
count_all[0]
はテンソルt
であなたに番号0が表示された回数を教えてくれます:
t = tf.placeholder(tf.int32)
count_all = tf.unsorted_segment_sum(tf.ones_like(t), t, 3)
sess.run(count_all[0], {t: [1,2,0,0,0,0]})
# returns 4
sess.run(count_all, {t: [1,2,0,0,0,0]})
# returns array([4, 1, 1], dtype=int32)
残念ながら、これだけの作品は何のバッチ次元が存在しないと仮定します。また、Eli Bixbyが指摘しているように、one_hotを割り当てる方が速い方法は、あまりにも多くのメモリを占有する可能性があります。これを回避する私の個人的な好みは、を次のように使用することです。
def count_all_fnc(e):
return tf.unsorted_segment_sum(tf.ones_like(e), e, n)
count_all = tf.map_fn(count_all_fnc, t)
n = 3
t = tf.placeholder(tf.int32)
def count_all_fnc(e):
return tf.unsorted_segment_sum(tf.ones_like(e), e, n)
count_all = tf.map_fn(count_all_fnc, t)
sess.run(count_all, {t:[[1, 0, 0, 2], [1, 2, 0, 0], [0, 0, 0, 0], [1, 1, 1, 2]]})
戻り
array([[2, 1, 1],
[2, 1, 1],
[4, 0, 0],
[0, 3, 1]], dtype=int32)
あなたが利用可能なメモリを持っている場合、それははるかに高速(約10倍)指数への各インデックスを表すワンホットベクトルの検索で、それらを一緒に合計し、これは高度に並列化できるためです。しかし、スペースの必要量はn*|t|
として増加し、これはすぐに実行不可能になります。
one_hot_t = tf.one_hot(t, n)
count_all = tf.reduce_sum(one_hot_t, axis=1)
は、あなたがboolean型のマスクを作成することができるだけで、特定の要素を数えるint
に変換し、それを合計するには、次の
import tensorflow as tf
X = tf.constant([6, 3, 3, 3, 0, 1, 3, 6, 7])
res = tf.reduce_sum(tf.cast(tf.equal(X, 3), tf.int32))
with tf.Session() as sess:
print sess.run(res)
はまた、あなたがtf.unique_with_countsを使用して、リスト/テンソル内のすべての要素をカウントすることができます。ダニエル・スレーター@
import tensorflow as tf
X = tf.constant([6, 3, 3, 3, 0, 1, 3, 6, 7])
y, idx, cnts = tf.unique_with_counts(X)
with tf.Session() as sess:
a, _, b = sess.run([y, idx, cnts])
print a
print b
- 1. .data()内の関数から要素に変数を取得する方法
- 2. コンテナ内の要素の型を取得する方法は?
- 3. リスト内の要素の位置を取得する方法は?
- 4. Javascriptでiframe要素内の要素を取得する方法は?
- 5. 配列内の要素を取得する方法(Python)
- 6. char **配列の要素数を取得する方法
- 7. AutoIt配列の要素数を取得する方法は?
- 8. Tensorflow python:テンソル内の個々の要素にアクセスする
- 9. jqueryスパン要素内でテキストボックス値を取得する方法
- 10. 要素内の要素を取得する(親/子)WPF
- 11. 要素で子要素を取得する方法
- 12. jqueryを使用してdiv要素内の寸法を取得する方法
- 13. LocalStorageの要素数を取得する
- 14. Selenium - 要素とそのサブ要素のテキストの取得方法
- 15. クエリーセット内の要素のインデックスを取得
- 16. PHP DOMDocument要素の取得方法は?
- 17. Sencha-touch:Ext.reg()で要素を取得/取得する方法
- 18. JSTLを使ってjsp内のリストの要素を取得する方法は?
- 19. jqueryの要素の子要素の配列を取得する方法
- 20. count()関数を使用して特定の数の内部タグを持つ要素を取得する方法
- 21. グラフコントロール内のマウスポインタの近くでビジュアル/フレームワーク要素を取得する方法
- 22. WPFでアイテムテンプレート内のコレクションのBinding要素を取得する方法は?
- 23. JList内のテキスト要素を変数に取得しますか?
- 24. jQuery UIのドラッグされた要素の子要素を取得する方法
- 25. jqueryを使用してページ内のDOM要素値を取得する方法
- 26. ExtJS 3.3.1 - Ext.Templateで配列内の各要素を取得する方法
- 27. ArrayAdapterのすべての要素を取得する方法は?
- 28. 隣接する要素のidを取得する方法
- 29. 次の子供以外の要素を取得する方法
- 30. jspでリストの最初の要素を取得する方法
あなたはまた、(https://stackoverflow.com/a/45207218/1090562)[各要素を数える]でき –