私は配列を持っています。この配列の最後の次元の値に基づいてマスクを作成したいと思います。 numpyのでは、私は何ができる:上記のコードでTensorflow:テンソルの最後の次元に関数を適用する方法
import numpy as np
room = np.array([
[[0, 0, 1], [1, 0, 0], [1, 0, 0]],
[[1, 0, 0], [0, 0, 1], [1, 0, 0]],
[[1, 0, 0], [1, 0, 0], [0, 0, 1]]
])
mask = np.apply_along_axis(lambda x: [1, 1, 1] if (x == [0, 0, 1]).all() else [0, 0, 0], axis=-1, arr=room)
result = mask * room
print(result)
をroom
私は、マスクを作成したかに基づいて(3、3、3)配列です。作成されたマスクは(3,3,3)配列でもあり、不要な要素をマスクするために他の配列と乗算するために使用されます。
しかし、私はTensorflowで同じことを達成することに問題があります。私は
room = tf.constant([
[[0, 0, 1], [1, 0, 0], [1, 0, 0]],
[[1, 0, 0], [0, 0, 1], [1, 0, 0]],
[[1, 0, 0], [1, 0, 0], [0, 0, 1]]
])
room = tf.reshape(room, shape=(9, -1))
mask = tf.map_fn(lambda x: [1, 1, 1] if x == [0, 0, 1] else [0, 0, 0], room)
、次のコードを試してみましたが、それは次のエラーで終了:
ValueError: The two structures don't have the same number of elements. First structure: <dtype: 'int32'>, second structure: [0, 0, 0].
dtypeは、データの形式ではなく、データの種類を指定するために使用されます。 – shapeare
あなたの答えをありがとう。 map_fnは最初の次元からアンパックされたテンソルだけで動作するので、map_fnが機能するためには、テンソルの形状を変更して最後の次元を公開する必要があります。これを回避する方法はありますか? – shapeare
私が知る限り:いいえ – nessuno