2020/4/9总结五(Tensorflow的一些小总结)

1 tensorflow通过名字获取某个变量

#获取所有变量名字
for variable_name in tf.global_variables():
    print(variable_name)

#获取某个变量方法1
graph = tf.get_default_graph()
w = graph.get_tensor_by_name('b_uid_fc:0')
print(sess.run(w))

#方法2
w_age,w_job=sess.run(['age_embed_matrix:0','job_embed_matrix:0'])
print(w_age)
print(w_job)

2 tensorflow加载模型

网上很多文章介绍加载 我卡了很久 才发现以下可行

  • 保存时所有的嵌入层、weight、bias都要赋予name值
  • 加载图结构 获取所有变量(根据name获取变量)
  • 重新写一遍网络结构 其中变量都用获取的变量
#加载图模型
saver = tf.train.import_meta_graph('./params/my_model.meta')
#saver=tf.train.Saver()不管用 只能用下面这个
saver.restore(sess, tf.train.latest_checkpoint('./params/'))

#定义图
graph = tf.get_default_graph()
#根据name获取变量
uid_embed_matrix=graph.get_tensor_by_name('uid_embed_matrix:0')
W_gender_fc,b_gender_fc=graph.get_tensor_by_name('W_gender_fc:0'),graph.get_tensor_by_name('b_gender_fc:0')

#接下来构建网络时直接用上面获取到的变量即可

3 list型特征传入placeholder

假如一个特征 每条数据都是30维度
pandas 的df中这一特征列用list存放
传入placeholder时

x:np.reshape(list(test_data['col'].values),[-1,30]),

4 字符型的list

一个特征 每条数据用长度为4的list
①【“A”,“B”,“C”,“X”】
②“A|B|C|X”

df这一列用①表示竟然不行??可能是默认把①当成了一个字符
用②表示 然后split分割成list 替换掉原字符串 真心不知道为什么①不可以

5 tensorflow 2维tensor 修改特定位置的值

参考https://www.jianshu.com/p/831cc6f5d810 还是挺巧妙的
1维tensor可以用one-hot编码改变?或者也用这样的方法

def set_value(matrix, x, y, val):
    # 提取出要更新的行
    row = tf.gather(matrix, x)
    # 构造这行的新数据
    new_row = tf.concat([row[:y], [val], row[y+1:]], axis=0)
    # 使用 tf.scatter_update 方法进正行替换
    matrix=tf.assign(matrix,tf.scatter_update(matrix, x, new_row)) 
    return matrix

A=tf.Variable(np.reshape(np.arange(12),[3,4]),tf.int32)
sess=tf.Session()
sess.run(tf.global_variables_initializer())

print(sess.run(A))
A=set_value(A,1,2,100)
print(sess.run(A))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值