Tenforflow k-hot编码?

时间:2017-11-22 14:00:18

标签: csv tensorflow

我正在继续学习TensorFlow,我在制作模型方面取得了一些成功。我正在深入研究API,我遇到了一些术语问题。我有一个273个特征的模型和4个线性独立的(在矩阵意义上)输出(每个输入矢量2 ^ 4 = 16个可能的输出矢量)。事实上,第一个模型是一个简单的大小[1,273] [273,4],它工作正常。为了达到这一步,我不得不进行大量的操作。我的python处理流程描述如下,所以我想知道我应该在每一步中利用哪些函数?

  1. 语料库是一个带有列的csv:y0,y1,y2,y3,句子(你可以跳过这个,CSV阅读有详细记录)
  2. 扫描语料库并提取至少两次使用的单词(删除单个拼写错误)并转换为向量。
  3. 将每个句子编码为它的矢量表示。 ([Y0,Y1,Y2,Y3],[X 0,...,x273])
  4. 我手动在python中完成了以上所有操作,但我想尽可能多地利用TF API。不幸的是,似乎1-hot编码在API中得到了很多支持,为了使用它,我必须创建和维护4个独立的模型。或者我错过了一些简单的东西?

1 个答案:

答案 0 :(得分:0)

我也没有在tf中找到k_hot函数。如果可以共享特征,则多标签而不是具有多个模型是一个好主意!

所以这是一个函数。它基本上是对向量的几种one_hot编码求和。

def k_hot(vector, num_classes):
  one_hot_in_lines = tf.one_hot(vector, num_classes)
  return tf.reduce_sum(one_hot_in_lines, axis=0)

让我们看看它是如何工作的:

tf.enable_eager_execution()
vector = [0, 2]
num_classes = 3
one_hot_in_lines = tf.one_hot(vector, num_classes) 
>> [[1., 0., 0.], [0., 0., 1.]]
k_hot_encoding = tf.reduce_sum(one_hot_in_lines, axis=0) 
>> [1., 0., 1.]

# with the function:
k_hot(vector) 
>> [1., 0., 1.]