我的问题是如何用字典映射张量?例如:
dict = {1:3, 2:4}
origin_tensor = tf.Variable([1,2,1], tf.int32)
字典很大。现在,我如何制作一个地图选项,根据字典将张量映射到tf.Variable([3,4,3],tf.int32)?
更重要的是,在映射时无法使用.eval(),您可以认为origin_tensor是批处理阅读器的标签张量。
答案 0 :(得分:1)
在Tensorflow 2.0中(未测试与较早版本的兼容性),请使用tf.lookup
:
dictionary = {1:3, 2:4}
origin_tensor = tf.Variable([1,2,1], dtype=tf.int64)
请注意:dict
是python保留的,因此将其替换为dictionary
,并将dtype=tf.int32
替换为dtype=tf.int64
是为了与tf.lookup.KeyValueTensorInitializer
兼容
这是原始张量:
origin_tensor
>> <tf.Variable 'Variable:0' shape=(3,) dtype=int64, numpy=array([1, 2, 1])>
这是由从python字典初始化的键值张量制成的Tensorflow查找表:
table = tf.lookup.StaticVocabularyTable(
tf.lookup.KeyValueTensorInitializer(
list(dictionary.keys()),
list(dictionary.values()),
key_dtype=tf.int64,
value_dtype=tf.int64,
),
num_oov_buckets=1,
)
这是实际的查询,它根据查询表返回带有所需元素的result_tensor
:
result_tensor = table.lookup(origin_tensor)
这是结果:
result_tensor
>> <tf.Tensor: id=400475, shape=(3,), dtype=int64, numpy=array([3, 4, 3])>
干杯!
答案 1 :(得分:0)
您可以使用tf.map_fn() function。 由于您描述的情况显示了x = x + 1的连接,可以在Tensorflow中将其解释为:
$stmt = $database->query("SELECT `meta_key`, `meta_value` FROM `fWR6qIN_postmeta` WHERE (meta_key like '$price_meta' OR meta_key like '$price_old_meta' OR meta_key like '$link_meta' OR meta_key like '$shop_meta')");
$map = array();
while($row = $stmt->fetch_assoc()){
$price = null;
$price_old = null;
$link = "";
$shop = "";
if($row["meta_key"] == $price_meta){
$price = $row["meta_value"];
}elseif($row["meta_key"] == $price_old_meta){
$price_old = $row["meta_value"];
}elseif($row["meta_key"] == $link_meta){
$link = $row["meta_value"];
}elseif($row["meta_key"] == $shop_meta) {
$shop = $row["meta_value"];
}else{
echo "Error\n";
}
$tmp = array(
$price_meta => $price,
$price_old_meta => $price_old,
$link_meta => $link,
$shop_meta => $shop
);
array_push($map, $tmp);
}