程世东老师TensorFlow实战——个性化推荐,代码学习笔记之③推荐过程

本文是程世东老师的TensorFlow实战系列笔记的第三部分,聚焦于推荐过程。已完成数据预处理和模型训练,现通过已保存的模型进行推荐。介绍了TensorFlow模型的恢复方法,并给出了实战代码的笔记,包括模型恢复的关键代码和相关库的使用。
摘要由CSDN通过智能技术生成

个性化推荐第三部分:推荐过程(完结撒花)

代码来自于知乎:https://zhuanlan.zhihu.com/p/32078473

/代码地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.ipynb
-------------------------------------------------------------------------------------------------------------------------------

前面我们已经进行了数据预处理与模型训练,并且已经将模型进行了存储,所以我们这里调用我们已经训练好的模型进行推荐即可。

1、首先,抛开这个实战代码过程,先介绍一下tensorflow模型的恢复,这里我主要参考这篇文章,对于tensorflow模型的保存与恢复写的很清楚 :https://www.cnblogs.com/hejunlin1992/p/7767912.html

针对这个实战代码,提取出其恢复模型的代码进行记录:


loaded_graph = tf.Graph() #1、新建一个在这段代码中的graph

with tf.Session(graph=loaded_graph) as sess:  #2、在session中引入这个图
    # 3、Load saved model导入已经训练好的模型
    loader = tf.train.import_meta_graph(load_dir + '.meta')#3.1、由于模型已经保存在meta文件中,这里import该文件来创建网络
    loader.restore(sess, load_dir)#3.2、加载参数:通过调用restore函数来恢复网络的参数

    
    
    # 4、Get Tensors from loaded model 
    # 要恢复这个网络,不仅需要恢复图(graph)和权重,也需要准备一个新的feed_dict,将新的训练数据喂给网络。
    #我们可以通过使用graph.get_tensor_by_name()方法来获得已经保存的操作(operations)和placeholder variables。
    #为后续feed做准备
    uid, user_gender, user_age, user_job, movie_id, movie_categories, movie_titles, targets, lr, dropout_keep_prob, _, movie_combine_layer_flat, __ = get_tensors(loaded_graph)  #loaded_graph

2、下面是实战代码的笔记部分:

由于我没有仔细看每一部分中用到了那些库,所以把前面有的库基本上都粘过来了。

均建议copy到自己的编辑器上查看~

import tensorflow as tf
import os
import pickle

import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
from collections import Counter

import re
from tensorflow.python.ops import math_ops
import random

import matplotlib.pyplot as plt
import time
import datetime

def load_params():
    """
    Load parameters from file
    """
    return pickle.load(open('params.p', mode='rb'))
    
load_dir = load_params()#从文件中导入参数
#-----------这里要从前一个文件copy过来参数,因为这部分不在graph和session中的模型参数中-------
#从本地读取数据
title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig = pickle.load(open('preprocess.p', mode='rb'))
#嵌入矩阵的维度:一个单词或其他变量的特征表示
embed_dim = 32
                                        #features为
                                        # [ [1, 1193, 0, ..., 10,list([ title]),list([ genres])],
                                        #   [2, 1193, 1, ..., 16,list([ ]),list([ ])],
                                        #   [12, 1193, 1, ..., 12,list([ ]),list([ ])],
                                        #   ..., 
                                        #   [5938, 2909, 1, ..., 1,list([ ]),list([ ])] 
                                        # ]

#用户ID个数
uid_max = max(features.take(0,1)) + 1 # 6040
                                      #features.take(0,1)得到userid的全部列,由于从0开始编号,则max取最大值再加1可以得到用户id个数
                                      #ndarray.take(indices, axis=None, out=None, mode='raise')从轴axis上获取数组中的元素,并以一维数组或者矩阵返回
                                      #按axis选择处于indices位置上的值
                                      #axis用于选择值的轴,0为横轴,1为纵向选
                                      #如features.take(0,0)就会选择横向第一条数据,(1,0)会选择横向第二条数据
#性别个数
gender_max = max(features.take(2,1)) + 1 # 1 + 1 = 2
#年龄类别个数
age_max = max(features.take(3,1)) + 1 # 6 + 1 = 7
#职业个数
job_max = max(features.take(4,1)) + 1# 20 + 1 = 21
#电影ID个数
movie_id_max = max(features.take(1,1)) + 1 # 3952
#电影类型个数
movie_categories_max = max(genres2int.values()) + 1 # 18 + 1 = 19
#电影名单词个数
movie_title_max = len(title_set) # 5216
                                 # title_set是由空格分开的电影单词字符串构成的列表(set表)

#对电影类型嵌入向量做加和操作的标志,后面调用combiner来使用作为参数
combiner = "sum"

#电影名长度
sentences_size = title_count #  title_count=15重命名,一个电影title字段的长度
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值