2017-05-28 4 views
1

では、私はTensorflowSVD(特異値分解)とtext8コーパスからのベクトル表現を作成します。私は以下のコードを使用するが、それは次元の数取られていない:私はTruncatedSVD in scikit-learnようなものが必要SVD Tensorflow

u,s,v = tf.svd(coocurrence_matrix) 

を。私は何をすべきか? Tensorflowで同じことをすることは可能ですか?

答えて

1

あなたはcs20siからの最初の割り当てを行っているので、私はそれを取っています。 任意の次元(たとえば、1000,1000)の共出現行列を形成します。あなたは言葉(リスト)とインデックスに単語をマッピングした辞書を持っていたら、それだけでテンソルを取るようあなただけの直接tf.svd使用することができた後

cooccurrence_matrix = np.zeros((VOCAB_SIZE, VOCAB_SIZE)) 
n_words = len(words) 
for i, current_word in enumerate(words): 
    if current_word not in dictionary: 
     current_word = 'UNK' 
    if i != 0: 
     left_word = words[i-1] 
     if left_word not in dictionary: 
      left_word = 'UNK' 
     cooccurrence_matrix[dictionary[current_word]][dictionary[left_word]] += 1 
    if i < n_words-1: 
     right_word = words[i+1] 
     if right_word not in dictionary: 
      right_word = 'UNK' 
     cooccurrence_matrix[dictionary[current_word]][dictionary[right_word]] += 1 

print cooccurrence_matrix.shape 

のような同時マトリックスを形成するためにndarray使用することができます。

tf_svd = tf.svd(matrix, compute_uv=True) 
with tf.Session() as sess: 
     sess.run(tf.global_variables_initializer()) 
     svd, u, v = sess.run(tf_svd, feed_dict={matrix:cooccurrence_matrix}) 

tf.svdの出力には、tf.svdのマニュアルに記載されている3つの値があります。私は辞書の大きさ100から始まって、事がうまくいっているかどうかを見ていきます。