将libFM模型变换成tensorflow可serving的形式

fm_model是libFM生成的模型

model.ckpt是可以tensorflow serving的模型结构

代码:

import tensorflow as tf

def load_fm_model(file_name):
    state = ‘‘
    fid = 0
    max_fid = 0
    w0 = 0.0
    wj = {}
    v = {}
    k = 0
    with open(file_name) as f:
        for line in f:
            line = line.rstrip()
            if ‘global bias W0‘ in line:
                state = ‘w0‘
                fid = 0
                continue
            elif ‘unary interactions Wj‘ in line:
                state = ‘wj‘
                fid = 0
                continue
            elif ‘pairwise interactions Vj,f‘ in line:
                state = ‘v‘
                fid = 0
                continue

            if state == ‘w0‘:
                fv = float(line)
                w0 = fv
            elif state == ‘wj‘:
                fv = float(line)
                if fv != 0:
                    wj[fid] = fv
                fid += 1
                max_fid = max(max_fid, fid)
            elif state == ‘v‘:
                fv = [float(_v) for _v in line.split(‘ ‘)]
                k = len(fv)
                if any([_v!=0 for _v in fv]):
                    v[fid] = fv
                fid += 1
                max_fid = max(max_fid, fid)
    return w0, wj, v, k, max_fid

_w0, _wj, _v, _k, _max_fid = load_fm_model(‘fm_model‘)

n=_max_fid
print ‘n‘, n
k=_k
print ‘k‘, k

#write fm algorithm
w0=tf.Variable(_w0)
w1=tf.Variable(tf.truncated_normal([n]))
print ‘w1‘, w1
w1_st = tf.SparseTensor(indices=[[a] for a in _wj.keys()], values=_wj.values(), dense_shape=[n])
tf.assign(w1, tf.sparse_tensor_to_dense(w1_st))
print ‘w1‘, w1
w2=tf.Variable(tf.truncated_normal([n,k]))
print ‘w2‘, w2
inds = []
vals = []
for fid, fv in _v.items():
    for i, v in enumerate(fv):
        if v != 0:
            inds.append([fid, i])
            vals.append(v)
w2_st = tf.SparseTensor(indices=inds, values=vals, dense_shape=[n,k])
tf.assign(w2, tf.sparse_tensor_to_dense(w2_st))
print ‘w2‘, w2

x_=tf.placeholder(tf.float32,[None,n])
#y_=tf.placeholder(tf.float32,[None])
batch=tf.placeholder(tf.int32)

w2_new=tf.reshape(tf.tile(w2,[batch,1]),[-1,n,k])
print ‘w2_new‘, w2_new

board_x=tf.reshape(tf.tile(x_,[1,k]),[-1,n,k])
print ‘board_x‘, board_x
board_x2=tf.square(board_x)

#print tf.multiply(w2_new,board_x)
#print tf.reduce_sum(tf.multiply(w2_new,board_x),axis=1)
q=tf.square(tf.reduce_sum(tf.multiply(w2_new,board_x),axis=1))
h=tf.reduce_sum(tf.multiply(tf.square(w2_new),board_x2),axis=1)

y_fm=w0+tf.reduce_sum(tf.multiply(x_,w1),axis=1)+    1/2*tf.reduce_sum(q-h,axis=1)

saver = tf.train.Saver()
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    #a = sess.run(y_fm, feed_dict={x_:x_train,y_:y_train,batch:70})
    #print a
    save_path = "./model.ckpt"
    #saver.save(sess, save_path)
    tf.saved_model.simple_save(sess, save_path, inputs={"x": x_, "batch":batch}, outputs={"y_fm": y_fm})

参考:

https://www.tensorflow.org/guide/saved_model

原文地址:https://www.cnblogs.com/yaoyaohust/p/10472780.html

时间: 2024-11-13 10:05:18

将libFM模型变换成tensorflow可serving的形式的相关文章

javascript将毫秒转换成hh:mm:ss的形式

function formatMilliseconds(value) { var second = parseInt(value) / 1000; // second var minute = 0; // minute var hour = 0; // hour if(second > 60) { minute = parseInt(second / 60); second = parseInt(second % 60); if(minute > 60) { hour = parseInt(m

算法工程师耗尽心血终成TensorFlow深度学习应用实践,值得一学!

本篇总的指导思想是在掌握深度学习的基本知识和特性的基础上,培养使用TensorFlow进行实际编程以解决图像处理相关问题的能力.全篇力求深入浅出,通过通俗易懂的语言和详细的程序分析,介绍TensorFlow的基本用法.高级模型设计和对应的程序编写. 本篇强调理论联系实际,重点介绍TensorFlow编程解决图像识别的应用,提供了大量数据集,并以代码的形式实现了深度学习模型,以供读者参考. 本篇可作为学习人工神经网络.深度学习TensorFlow 程序设计以及图像处理等相关内容的程序设计人员学习.

[tensorflow] 通过Class的形式实现网络的创建、加深理解graph和session

一.理解graph和session 对tensorflow中的graph和session进行更深入的了解,能够帮助理解tensorflow的运行机制,使得可以在一个运行程序中调用不同的神经网络.总而言之,是深入学习必须掌握的东西. 在程序一开始,tensorflow会自动生成一个默认的graph.如果不显示的指定graph,所有的操作(添加张量.节点)都会自动加入默认图. 可以通过g=tf.Graph()显示获得一个图的变量.然后通过 with g.as_default():上下文管理器,在后文

Go语言之读取yaml配置文件,转换成struct结构,json形式输出

1.例子1 1.1.yaml文件内容如下: host: localhost:3306 user: root pwd: 123456 dbname: test 1.2.代码如下: //将yaml文件,转换成对象,再转换成json格式输出 package main import ( "encoding/json" "fmt" "gopkg.in/yaml.v2" "io/ioutil" ) //定义conf类型 //类型里的属性,

十进制如何转化成二进制,返回字符串形式

def Dec2Bin(num): temp = [] result = '' while num: yushu = num % 2 num = num//2 temp.append(yushu) while temp: result += str(temp.pop()) return result print(Dec2Bin(25))======11001 temp是一个空列表,用来保存每次除2后的余数 result是一个空的字符串,用以输出二进制的字符串形式 append()将余数添加到列表

将百度坐标转换的javascript api官方示例改写成传统的回调函数形式

改写前: 百度地图中坐标转换的JavaScript API示例官方示例如下: var points = [new BMap.Point(116.3786889372559,39.90762965106183), new BMap.Point(116.38632786853032,39.90795884517671), new BMap.Point(116.39534009082035,39.907432133833574), new BMap.Point(116.40624058825688,3

(转) TensorFlow深度学习,一篇文章就够了

TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6 原文出处: 我爱计算机 (@tobe迪豪 ) 作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者. TensorFlow深度学习框架 Google不仅是大数据和云计算的领导者,在机器学习和深度学习上也有很好的实践和积累,在2015年年底开源了内部使用的深度学习框架TensorFlow. 与Caffe.Theano.Torch.MXNet等框

问题集录--TensorFlow深度学习

TensorFlow深度学习框架 Google不仅是大数据和云计算的领导者,在机器学习和深度学习上也有很好的实践和积累,在2015年年底开源了内部使用的深度学习框架TensorFlow. 与Caffe.Theano.Torch.MXNet等框架相比,TensorFlow在Github上Fork数和Star数都是最多的,而且在图形分类.音频处理.推荐系统和自然语言处理等场景下都有丰富的应用.最近流行的Keras框架底层默认使用TensorFlow,著名的斯坦福CS231n课程使用TensorFlo

大数据下基于Tensorflow框架的深度学习示例教程

近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较好的价值,而深度学习在大数据场景下更能揭示数据内部的逻辑关系.本文就以大数据作为场景,通过自底向上的教程详述在大数据架构体系中如何应用深度学习这一技术.大数据架构中采用的是hadoop系统以及Kerberos安全认证,深度学习采用的是分布式的Tensorflow架构,hadoop解决了大数据的存储问