张量张量值映射

时间:2017-03-17 09:29:57

标签: python machine-learning tensorflow

我的问题是如何用字典映射张量?例如:

dict = {1:3, 2:4}
origin_tensor = tf.Variable([1,2,1], tf.int32)

字典很大。现在,我如何制作一个地图选项,根据字典将张量映射到tf.Variable([3,4,3],tf.int32)?

更重要的是,在映射时无法使用.eval(),您可以认为origin_tensor是批处理阅读器的标签张量。

2 个答案:

答案 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);
}