본문 바로가기
파이썬

파이썬 TensorFlow에서 사전 학습 된 단어 임베딩 (word2vec 또는 Glove) 사용

by º기록 2020. 11. 8.
반응형


with tf.device('/cpu:0'), tf.name_scope("embedding"):
    W = tf.Variable(
        tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),
        name="W")
    self.embedded_chars = tf.nn.embedding_lookup(W, self.input_x)
    self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)

아무도 Word2vec 또는 GloVe 사전 훈련 된 단어 임베딩의 결과를 무작위 대신 사용하는 방법을 알고 있습니까?

 

해결 방법

 



W = tf.constant(embedding, name="W")

이것은 가장 쉬운 방법이지만 tf.constant () 의 값이 메모리에 여러 번 저장되기 때문에 메모리 효율성이 떨어집니다. 임베딩 은 매우 클 수 있으므로 장난감 예제에만이 접근 방식을 사용해야합니다.


W = tf.Variable(tf.constant(0.0, shape=[vocab_size, embedding_dim]),
                trainable=False, name="W")

embedding_placeholder = tf.placeholder(tf.float32, [vocab_size, embedding_dim])
embedding_init = W.assign(embedding_placeholder)

# ...
sess = tf.Session()

sess.run(embedding_init, feed_dict={embedding_placeholder: embedding})

이렇게하면 그래프에 embedding 사본이 저장되는 것을 방지 할 수 있지만, 한 번에 메모리에 매트릭스 사본 2 개를 보관할 수있는 충분한 메모리가 필요합니다 (하나는 NumPy 배열 용이고 다른 하나는 tf .Variable ). 학습 중에 임베딩 행렬을 상수로 유지한다고 가정 했으므로 W trainable = False 로 생성됩니다.


W = tf.Variable(...)

embedding_saver = tf.train.Saver({"name_of_variable_in_other_model": W})

# ...
sess = tf.Session()
embedding_saver.restore(sess, "checkpoint_filename.ckpt")

 

참조 페이지 https://stackoverflow.com/questions/35687678

 

 

반응형

댓글