首先代碼如下:
def word_vis(self,file,txtname):#生成的模型存放的地址:word_vismodel'+file為新建的文件夾名 txtname是通過word2vec生成 的詞向量txt文檔地址
from tqdm import tqdm
import numpy as np
import tensorflow as tf
from tensorflow.contrib.tensorboard.plugins import projector
import os
import codecs
words, embeddings = [], []
log_path = './tmp/word_vismodel'+file #生成的模型存放的地址
if not os.path.exists(log_path):
os.mkdir(log_path)
with codecs.open(txtname, 'r') as f:
header = f.readline()
vocab_size, vector_size = map(int, header.split())
for line in tqdm(range(vocab_size)):
word_list = f.readline().split(' ')
word = word_list[0]
#此處由於維度出錯 Cannot feed value of shape (33, 99) for Tensor 'Placeholder:0', which has shape '(33, 100)'
vector = word_list[1:]#剛開始代碼是word_list[1:-1]報上面的錯誤,修改后沒有問題
if word == "":
continue
words.append(word)
embeddings.append(np.array(vector))
assert len(words) == len(embeddings)
print(len(words),vector_size)
with tf.Session() as sess:
X = tf.Variable([0.0], name='embedding')
place = tf.placeholder(tf.float32, shape=[len(words), vector_size])
set_x = tf.assign(X, place, validate_shape=False)
sess.run(tf.global_variables_initializer())
sess.run(set_x, feed_dict={place: embeddings})
with codecs.open(log_path + '/metadata.tsv', 'w') as f:
for word in tqdm(words):
f.write(word + '\n')
# with summary
summary_writer = tf.summary.FileWriter(log_path, sess.graph)
config = projector.ProjectorConfig()
embedding_conf = config.embeddings.add()
embedding_conf.tensor_name = 'embedding:0'
embedding_conf.metadata_path = os.path.join('metadata.tsv')
projector.visualize_embeddings(summary_writer, config)
# save
saver = tf.train.Saver()
saver.save(sess, os.path.join(log_path, "model.ckpt"))
報錯2:按照官方文檔給出的運行tensorboard文件方式發現無法顯示,查閱資料https://blog.csdn.net/whitesilence/article/details/79261592 發現,需要先將運行目錄定位到存放要顯示圖像的文件位置
也就是上面的log_path ,先通過命令行進入該路徑,然后輸入: tensorboard --logdir ./即可運行當前路徑下得到的圖像
報錯3:具體報錯是顯示英文:typeerror...具體不記得了,但是左下角出現了文件節點有13個但是生成圖像的文件有12個節點,猜測是由於我的詞向量文件有一個詞是空格的問題,把詞向量文件中該空格及相應的向量
還有將第一行的13改成12就沒有問題了。
還有一個問題需要注意:我的電腦沒有辦法通過localhost:6006進入該軟件顯示界面,是在命令行下輸入tensorboard --logdir ./后提示的路徑,具體可以參看自己的電腦提示tensorboard --logdir ./
另外,我發現寫多個word_vis()每次都是第一個該函數能執行出來結果,剩余的顯示不了圖像,需要重新執行
