加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Tensorflow tf.constant_initializer非常慢

发布时间:2020-12-20 13:17:54 所属栏目:Python 来源:网络整理
导读:尝试使用100 dim的训练有素的word2vec嵌入来训练LSTM @staticmethoddef load_embeddings(pre_trained_embeddings_path,word_embed_size): embd = [] import time start_time = time.time() cnt = 4 with codecs.open(pre_trained_embeddings_path,mode="r",e
尝试使用100 dim的训练有素的word2vec嵌入来训练LSTM

@staticmethod
def load_embeddings(pre_trained_embeddings_path,word_embed_size):
    embd = []
    import time
    start_time = time.time()
    cnt = 4
    with codecs.open(pre_trained_embeddings_path,mode="r",encoding='utf-8') as f:
        for line in f.readlines():
            values = line.strip().split(' ')
            embd.append(values[1:])
            cnt += 1
            if cnt % 100000 == 0:
                print("word-vectors loaded: %d" % cnt)

    embedding,vocab_size,embed_dim = embd,len(embd),len(embd[0])

    load_end_time = time.time()
    print("word vectors loaded from and start initialising,cnt: %d,time taken: %d secs " % (vocab_size,load_end_time - start_time))

    embedding_init = tf.constant_initializer(embedding,dtype=tf.float16)
    src_word_embedding = tf.get_variable(shape=[vocab_size,embed_dim],initializer=embedding_init,trainable=False,name='word_embedding',dtype=tf.float16)

    print("word-vectors loaded and initialised,time taken: %d secs" % (vocab_size,time.time() - load_end_time))

    return src_word_embedding

运行此方法时输出的结果如下:

word vectors loaded from and start initialising,cnt: 2419080,time taken: 74 secs
word-vectors loaded and initialised,time taken: 1647 secs

系统信息:tensorflow 1.1.0,tcmalloc,python 3.6,ubuntu 14.04

HALF一小时初始化似乎很慢或是正常行为?知道可能是什么问题还是有问题?

更新:使用@sirfz方法提供嵌入使得加载嵌入的速度非常快,初始化完成时间为85秒

解决方法

将大常量加载到图形中不仅速度较慢,而且还会泄漏大量内存.我有一个类似的问题 I reported not long ago和我最好的解决方法是:

# placeholder for loading your saved embeddings
embedding_init = tf.placeholder(tf.float16,shape=[vocab_size,embed_dim])
src_word_embedding = tf.get_variable(initializer=embedding_init,dtype=tf.float16)

# run initialization with the value of embeddings placeholder
session.run(tf.global_variables_initializer(),feed_dict={embedding_init: embedding})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读