当前位置: 首页 > news >正文

网站建设内部问卷微博个人网页设计模板

网站建设内部问卷,微博个人网页设计模板,东莞搜狗推广,怎么做淘宝返利网站文章目录 前言视频演示效果1.数据集环境配置安装教程与资源说明1.1 ML-1M 数据集概述1.1.1数据集内容1.1.2. 数据集规模1.1.3. 数据特点1.1.4. 文件格式1.1.5. 应用场景 2.模型架构3.推荐实现3.1 用户数据3.2 电影数据3.3 评分数据3.4 数据预处理3.5实现数据预处理3.6 加载数据… 文章目录 前言视频演示效果1.数据集环境配置安装教程与资源说明1.1 ML-1M 数据集概述1.1.1数据集内容1.1.2. 数据集规模1.1.3. 数据特点1.1.4. 文件格式1.1.5. 应用场景 2.模型架构3.推荐实现3.1 用户数据3.2 电影数据3.3 评分数据3.4 数据预处理3.5实现数据预处理3.6 加载数据并保存到本地3.7从本地读取数据 4 模型设计4.1 概述4.2 文本卷积网络辅助函数构建神经网络定义User的嵌入矩阵将User的嵌入矩阵一起全连接生成User的特征定义Movie ID的嵌入矩阵对电影类型的多个嵌入向量做加和Movie Title的文本卷积网络实现将Movie的各个层一起做全连接 生成Movie特征矩阵生成User特征矩阵开始推荐电影 结论 前言 随着互联网和流媒体平台的快速发展用户可以随时访问海量的电影资源。然而如何帮助用户在繁杂的选择中快速找到符合其兴趣的电影成为了一个重要且具有挑战性的问题。推荐系统作为解决信息过载的重要工具在电影行业得到了广泛应用。近年来深度学习技术的崛起为推荐系统的构建提供了新的方法和更高的精度其强大的特征提取能力和非线性建模能力使电影推荐系统更加智能化和个性化。 MovieLens 1M简称 ML-1M是电影推荐领域最常用的公开数据集之一包含约6000名用户对3900多部电影的100万条评分记录。该数据集提供了用户的基本信息如年龄、性别、职业等、电影的元数据如标题、类型、年份等以及用户对电影的评分。这些信息为电影推荐系统的研究提供了丰富的实验数据。基于 ML-1M 数据集研究者可以开发和验证各种推荐算法同时通过标准化的数据便于不同方法的横向比较。 传统的推荐方法如基于协同过滤和矩阵分解的技术在处理稀疏数据和冷启动问题时表现有限。而深度学习方法以其在高维数据中的强大建模能力能够挖掘用户和电影之间的复杂非线性关系并捕捉多模态数据的深层特征。例如通过神经网络构建用户和电影的嵌入向量深度学习方法可以对用户行为和电影内容进行联合建模通过融合用户的评分历史和电影的文本信息、图像特征等多源数据可以显著提升推荐结果的精准度和多样性。 本研究以 ML-1M 数据集为基础探索深度学习技术在电影推荐中的应用。研究目标包括构建高效的深度学习模型挖掘用户行为模式融合电影的多模态信息提升推荐系统的准确性以及优化推荐策略为用户提供个性化的观影建议。本研究不仅具有理论意义也为实际推荐系统的开发提供了宝贵的参考。 视频演示效果 深度学习实战电影推荐系统 觉得不错的小伙伴感谢点赞、关注加收藏哦更多干货内容持续更新… 1.数据集 环境配置安装教程与资源说明 离线安装配置文件说明 1.1 ML-1M 数据集概述 MovieLens 1M简称 ML-1M数据集是由明尼苏达大学的 GroupLens 研究团队发布的一个电影推荐系统研究数据集是推荐算法开发和评估领域的经典数据集之一。该数据集包含 100 万条电影评分记录为研究电影推荐系统提供了标准化和高质量的数据资源。以下是 ML-1M 数据集的详细概述 1.1.1数据集内容 ML-1M 数据集包括以下几部分信息 用户数据 用户唯一 ID。性别Male 或 Female。年龄段如 18-24、25-34 等。职业编号对应具体职业类别。 电影数据 电影唯一 ID。电影标题及其上映年份。电影的分类标签如动作、喜剧、科幻等。 评分数据 用户对电影的评分范围为 1 到 5 的整数。评分的时间戳用于分析评分的时间分布和用户行为模式。 1.1.2. 数据集规模 用户数量6,040 名用户。电影数量3,900 多部电影。评分数量1,000,209 条评分。 1.1.3. 数据特点 稀疏性尽管数据集包含大量评分记录但与可能的评分总量相比即用户数 × 电影数实际评分所占比例较小表现出典型的稀疏性问题。时间维度评分记录带有时间戳信息可以分析用户行为的时间动态。多样性用户和电影的元数据涵盖了性别、年龄、职业、类型等多个维度为推荐算法提供了丰富的上下文信息。 1.1.4. 文件格式 ML-1M 数据集通常以分隔符文本文件如 CSV 或 TXT形式存储包括以下文件 users.dat包含用户的基本信息。movies.dat包含电影的基本信息。ratings.dat包含用户的评分记录。 1.1.5. 应用场景 ML-1M 数据集广泛应用于以下研究方向 推荐系统算法开发用于测试协同过滤、矩阵分解、深度学习等推荐算法的性能。用户行为建模分析用户的观影习惯、兴趣动态和评分模式。冷启动问题研究通过新用户或新电影的推荐解决数据稀疏性问题。多模态融合结合文本、图像、时间序列等信息优化推荐效果。 ML-1M 数据集因其数据结构清晰和实验价值高成为推荐系统研究的重要基准许多先进的算法和模型均在该数据集上进行了验证。 2.模型架构 3.推荐实现 本项目使用的是MovieLens 1M 数据集包含6000个用户在近4000部电影上的1亿条评论。 数据集分为三个文件用户数据users.dat电影数据movies.dat和评分数据ratings.dat。 3.1 用户数据 分别有用户ID、性别、年龄、职业ID和邮编等字段。 数据中的格式UserID::Gender::Age::Occupation::Zip-code Gender is denoted by a “M” for male and “F” for female Age is chosen from the following ranges: 1: “Under 18”18: “18-24”25: “25-34”35: “35-44”45: “45-49”50: “50-55”56: “56” Occupation is chosen from the following choices: 0: “other” or not specified1: “academic/educator”2: “artist”3: “clerical/admin”4: “college/grad student”5: “customer service”6: “doctor/health care”7: “executive/managerial”8: “farmer”9: “homemaker”10: “K-12 student”11: “lawyer”12: “programmer”13: “retired”14: “sales/marketing”15: “scientist”16: “self-employed”17: “technician/engineer”18: “tradesman/craftsman”19: “unemployed”20: “writer” users_title [‘UserID’, ‘Gender’, ‘Age’, ‘OccupationID’, ‘Zip-code’] users pd.read_table(‘./ml-1m/users.dat’, sep‘::’, headerNone, namesusers_title, engine ‘python’) users.head() 可以看出UserID、Gender、Age和Occupation都是类别字段其中邮编字段是我们不使用的。 3.2 电影数据 分别有电影ID、电影名和电影风格等字段。 数据中的格式MovieID::Title::Genres Titles are identical to titles provided by the IMDB (including year of release) Genres are pipe-separated and are selected from the following genres: ActionAdventureAnimationChildren’sComedyCrimeDocumentaryDramaFantasyFilm-NoirHorrorMusicalMysteryRomanceSci-FiThrillerWarWestern movies_title [‘MovieID’, ‘Title’, ‘Genres’] movies pd.read_table(‘./ml-1m/movies.dat’, sep‘::’, headerNone, namesmovies_title, engine ‘python’) movies.head() MovieID是类别字段Title是文本Genres也是类别字段 3.3 评分数据 分别有用户ID、电影ID、评分和时间戳等字段。 数据中的格式UserID::MovieID::Rating::Timestamp UserIDs range between 1 and 6040MovieIDs range between 1 and 3952Ratings are made on a 5-star scale (whole-star ratings only)Timestamp is represented in seconds since the epoch as returned by time(2)Each user has at least 20 ratings ratings_title [‘UserID’,‘MovieID’, ‘Rating’, ‘timestamps’] ratings pd.read_table(‘./ml-1m/ratings.dat’, sep‘::’, headerNone, namesratings_title, engine ‘python’) ratings.head() 评分字段Rating就是我们要学习的targets时间戳字段我们不使用。 3.4 数据预处理 UserID、Occupation和MovieID不用变。Gender字段需要将‘F’和‘M’转换成0和1。Age字段要转成7个连续数字0~6。Genres字段是分类字段要转成数字。首先将Genres中的类别转成字符串到数字的字典然后再将每个电影的Genres字段转成数字列表因为有些电影是多个Genres的组合。Title字段处理方式跟Genres字段一样首先创建文本到数字的字典然后将Title中的描述转成数字的列表。另外Title中的年份也需要去掉。Genres和Title字段需要将长度统一这样在神经网络中方便处理。空白部分用‘ PAD ’对应的数字填充。 3.5实现数据预处理 def load_data():Load Dataset from File#读取User数据users_title [UserID, Gender, Age, JobID, Zip-code]users pd.read_table(./ml-1m/users.dat, sep::, headerNone, namesusers_title, engine python)# 保留以下特征users users.filter(regexUserID|Gender|Age|JobID)users_orig users.values#改变User数据中性别和年龄gender_map {F:0, M:1}users[Gender] users[Gender].map(gender_map)age_map {val:ii for ii,val in enumerate(set(users[Age]))}users[Age] users[Age].map(age_map)#读取Movie数据集movies_title [MovieID, Title, Genres]movies pd.read_table(./ml-1m/movies.dat, sep::, headerNone, namesmovies_title, engine python)movies_orig movies.values#将Title中的年份去掉pattern re.compile(r^(.*)\((\d)\)$)title_map {val:pattern.match(val).group(1) for ii,val in enumerate(set(movies[Title]))}movies[Title] movies[Title].map(title_map)#电影类型转数字字典genres_set set()for val in movies[Genres].str.split(|):genres_set.update(val)genres_set.add(PAD)# 将类型进行编号genres2int {val:ii for ii, val in enumerate(genres_set)}#将电影类型转成等长数字列表genres_map {val:[genres2int[row] for row in val.split(|)] for ii,val in enumerate(set(movies[Genres]))}# 将每个样本的电影类型数字列表处理成相同长度长度不够用PAD填充for key in genres_map:for cnt in range(max(genres2int.values()) - len(genres_map[key])):genres_map[key].insert(len(genres_map[key]) cnt,genres2int[PAD])movies[Genres] movies[Genres].map(genres_map)#电影Title转数字字典title_set set()for val in movies[Title].str.split():title_set.update(val)title_set.add(PAD)title2int {val:ii for ii, val in enumerate(title_set)}#将电影Title转成等长数字列表长度是15title_count 15title_map {val:[title2int[row] for row in val.split()] for ii,val in enumerate(set(movies[Title]))}for key in title_map:for cnt in range(title_count - len(title_map[key])):title_map[key].insert(len(title_map[key]) cnt,title2int[PAD])movies[Title] movies[Title].map(title_map)#读取评分数据集ratings_title [UserID,MovieID, ratings, timestamps]ratings pd.read_table(./ml-1m/ratings.dat, sep::, headerNone, namesratings_title, engine python)ratings ratings.filter(regexUserID|MovieID|ratings)#合并三个表data pd.merge(pd.merge(ratings, users), movies)#将数据分成X和y两张表target_fields [ratings]features_pd, targets_pd data.drop(target_fields, axis1), data[target_fields]features features_pd.valuestargets_values targets_pd.valuesreturn title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig3.6 加载数据并保存到本地 title_countTitle字段的长度15title_setTitle文本的集合genres2int电影类型转数字的字典features是输入Xtargets_values是学习目标yratings评分数据集的Pandas对象users用户数据集的Pandas对象movies电影数据的Pandas对象data三个数据集组合在一起的Pandas对象movies_orig没有做数据处理的原始电影数据users_orig没有做数据处理的原始用户数据 title_count, title_set, genres2int, features, targets_values, \ratings, users, movies, data, movies_orig, users_orig load_data()with open(./processed_data/preprocess.pkl, wb) as f:pickle.dump((title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig), f)3.7从本地读取数据 with open(./processed_data/preprocess.pkl, moderb) as f:title_count, title_set, genres2int, features, \targets_values, ratings, users, movies, data, movies_orig, users_orig pickle.load(f) 4 模型设计 4.1 概述 通过研究数据集中的字段类型我们发现有一些是类别字段通常的处理是将这些字段转成one hot编码但是像UserID、MovieID这样的字段就会变成非常的稀疏输入的维度急剧膨胀, 所以在预处理数据时将这些字段转成了数字我们用这个数字当做嵌入矩阵的索引在网络的第一层使用了嵌入层维度是N32和N16。 这里的思想其实和 word2vec 比较类似。我们会对用户或者电影的每个属性都指定一个特征维度空间这就好比我们在自然语言处理中对每个单词指定特征维度空间。从下面的代码中可以看到我们将用到的属性的特征维度设置为了 32 或者 16. 电影类型的处理要多一步有时一个电影有多个电影类型这样从嵌入矩阵索引出来是一个n32的矩阵因为有多个类型嘛我们要将这个矩阵求和变成132的向量。 电影名的处理比较特殊没有使用循环神经网络而是用了文本卷积网络下文会进行说明。 从嵌入层索引出特征以后将各特征传入全连接层将输出再次传入全连接层最终分别得到1200的用户特征和电影特征两个特征向量。 我们的目的就是要训练出用户特征和电影特征在实现推荐功能时使用。得到这两个特征以后就可以选择任意的方式来拟合评分了。我使用了两种方式一个是上图中画出的将两个特征做向量乘法将结果与真实评分做回归采用MSE优化损失。因为本质上这是一个回归问题另一种方式是将两个特征作为输入再次传入全连接层输出一个值将输出值回归到真实评分采用MSE优化损失。 实际上第二个方式的MSE loss在0.8附近第一个方式在1附近5次迭代的结果。 4.2 文本卷积网络 将卷积神经网络用于文本网络的第一层是词嵌入层由每一个单词的嵌入向量组成的嵌入矩阵。下一层使用多个不同尺寸窗口大小的卷积核在嵌入矩阵上做卷积窗口大小指的是每次卷积覆盖几个单词。这里跟对图像做卷积不太一样图像的卷积通常用2x2、3x3、5x5之类的尺寸而文本卷积要覆盖整个单词的嵌入向量所以尺寸是单词数向量维度比如每次滑动3个4个或者5个单词。第三层网络是max pooling得到一个长向量最后使用dropout做正则化最终得到了电影Title的特征。 辅助函数 import tensorflow as tf import os import pickledef save_params(params):Save parameters to filewith open(params.p, wb) as f:pickle.dump(params, f)def load_params():Load parameters from filewith open(params.p, moderb) as f:return pickle.load(f)构建神经网络 定义User的嵌入矩阵 def get_user_embedding(uid, user_gender, user_age, user_job):with tf.name_scope(user_embedding):# 下面的操作和情感分析项目中的单词转换为词向量的操作本质上是一样的# 用户的特征维度设置为 32# 先初始化一个非常大的用户矩阵# tf.random_uniform 的第二个参数是初始化的最小值这里是-1第三个参数是初始化的最大值这里是1uid_embed_matrix tf.Variable(tf.random_uniform([uid_max, embed_dim], -1, 1), name uid_embed_matrix)# 根据指定用户ID找到他对应的嵌入层uid_embed_layer tf.nn.embedding_lookup(uid_embed_matrix, uid, name uid_embed_layer)# 性别的特征维度设置为 16将User的嵌入矩阵一起全连接生成User的特征 def get_user_feature_layer(uid_embed_layer, gender_embed_layer, age_embed_layer, job_embed_layer):with tf.name_scope(user_fc):#第一层全连接# tf.layers.dense 的第一个参数是输入第二个参数是层的单元的数量uid_fc_layer tf.layers.dense(uid_embed_layer, embed_dim, name uid_fc_layer, activationtf.nn.relu)gender_fc_layer tf.layers.dense(gender_embed_layer, embed_dim, name gender_fc_layer, activationtf.nn.relu)age_fc_layer tf.layers.dense(age_embed_layer, embed_dim, name age_fc_layer, activationtf.nn.relu)job_fc_layer tf.layers.dense(job_embed_layer, embed_dim, name job_fc_layer, activationtf.nn.relu)#第二层全连接# 将上面的每个分段组成一个完整的全连接层user_combine_layer tf.concat([uid_fc_layer, gender_fc_layer, age_fc_layer, job_fc_layer], 2) #(?, 1, 128)# 验证上面产生的 tensorflow 是否是 128 维度的print(user_combine_layer.shape)# tf.contrib.layers.fully_connected 的第一个参数是输入第二个参数是输出# 这里的输入是user_combine_layer输出是200是指每个用户有200个特征# 相当于是一个200个分类的问题每个分类的可能性都会输出在这里指的就是每个特征的可能性user_combine_layer tf.contrib.layers.fully_connected(user_combine_layer, 200, tf.tanh) #(?, 1, 200)user_combine_layer_flat tf.reshape(user_combine_layer, [-1, 200])return user_combine_layer, user_combine_layer_flat定义Movie ID的嵌入矩阵 def get_movie_id_embed_layer(movie_id):with tf.name_scope(movie_embedding):movie_id_embed_matrix tf.Variable(tf.random_uniform([movie_id_max, embed_dim], -1, 1), name movie_id_embed_matrix)movie_id_embed_layer tf.nn.embedding_lookup(movie_id_embed_matrix, movie_id, name movie_id_embed_layer)return movie_id_embed_layer对电影类型的多个嵌入向量做加和 def get_movie_categories_layers(movie_categories):with tf.name_scope(movie_categories_layers):movie_categories_embed_matrix tf.Variable(tf.random_uniform([movie_categories_max, embed_dim], -1, 1), name movie_categories_embed_matrix)movie_categories_embed_layer tf.nn.embedding_lookup(movie_categories_embed_matrix, movie_categories, name movie_categories_embed_layer)if combiner sum:movie_categories_embed_layer tf.reduce_sum(movie_categories_embed_layer, axis1, keep_dimsTrue)# elif combiner mean:return movie_categories_embed_layerMovie Title的文本卷积网络实现 def get_movie_cnn_layer(movie_titles):#从嵌入矩阵中得到电影名对应的各个单词的嵌入向量with tf.name_scope(movie_embedding):movie_title_embed_matrix tf.Variable(tf.random_uniform([movie_title_max, embed_dim], -1, 1), name movie_title_embed_matrix)movie_title_embed_layer tf.nn.embedding_lookup(movie_title_embed_matrix, movie_titles, name movie_title_embed_layer)# 为 movie_title_embed_layer 增加一个维度# 在这里是添加到最后一个维度最后一个维度是channel# 所以这里的channel数量是1个# 所以这里的处理方式和图片是一样的movie_title_embed_layer_expand tf.expand_dims(movie_title_embed_layer, -1)#对文本嵌入层使用不同尺寸的卷积核做卷积和最大池化pool_layer_lst []for window_size in window_sizes:with tf.name_scope(movie_txt_conv_maxpool_{}.format(window_size)):# [window_size, embed_dim, 1, filter_num] 表示输入的 channel 的个数是1输出的 channel 的个数是 filter_numfilter_weights tf.Variable(tf.truncated_normal([window_size, embed_dim, 1, filter_num],stddev0.1),name filter_weights)filter_bias tf.Variable(tf.constant(0.1, shape[filter_num]), namefilter_bias)# conv2d 是指用到的卷积核的大小是 [filter_height * filter_width * in_channels, output_channels]# 在这里卷积核会向两个维度的方向进行滑动# conv1d 是将卷积核向一个维度的方向进行滑动这就是 conv1d 和 conv2d 的区别# strides 设置要求第一个和最后一个数字是1四个数字的顺序要求默认是 NHWC也就是 [batch, height, width, channels]# padding 设置为 VALID 其实就是不 PAD设置为 SAME 就是让输入和输出的维度是一样的conv_layer tf.nn.conv2d(movie_title_embed_layer_expand, filter_weights, [1,1,1,1], paddingVALID, nameconv_layer)# tf.nn.bias_add 将偏差 filter_bias 加到 conv_layer 上# tf.nn.relu 将激活函数设置为 relurelu_layer tf.nn.relu(tf.nn.bias_add(conv_layer,filter_bias), name relu_layer)# tf.nn.max_pool 的第一个参数是输入# 第二个参数是 max_pool 窗口的大小每个数值表示对每个维度的窗口设置# 第三个参数是 strides和 conv2d 的设置是一样的# 这边的池化是将上面每个卷积核的卷积结果转换为一个元素# 由于这里的卷积核的数量是 8 个所以下面生成的是一个具有 8 个元素的向量maxpool_layer tf.nn.max_pool(relu_layer, [1,sentences_size - window_size 1 ,1,1], [1,1,1,1], paddingVALID, namemaxpool_layer)pool_layer_lst.append(maxpool_layer)#Dropout层with tf.name_scope(pool_dropout):# 这里最终的结果是这样的# 假设卷积核的窗口是 2卷积核的数量是 8# 那么通过上面的池化操作之后生成的池化的结果是一个具有 8 个元素的向量# 每种窗口大小的卷积核经过池化后都会生成这样一个具有 8 个元素的向量# 所以最终生成的是一个 8 维的二维矩阵它的另一个维度就是不同的窗口的数量# 在这里就是 2,3,4,5那么最终就是一个 8*4 的矩阵pool_layer tf.concat(pool_layer_lst, 3, name pool_layer)max_num len(window_sizes) * filter_num# 将这个 8*4 的二维矩阵平铺成一个具有 32 个元素的一维矩阵pool_layer_flat tf.reshape(pool_layer , [-1, 1, max_num], name pool_layer_flat)dropout_layer tf.nn.dropout(pool_layer_flat, dropout_keep_prob, name dropout_layer)return pool_layer_flat, dropout_layer将Movie的各个层一起做全连接 def get_movie_feature_layer(movie_id_embed_layer, movie_categories_embed_layer, dropout_layer):with tf.name_scope(movie_fc):#第一层全连接movie_id_fc_layer tf.layers.dense(movie_id_embed_layer, embed_dim, name movie_id_fc_layer, activationtf.nn.relu)movie_categories_fc_layer tf.layers.dense(movie_categories_embed_layer, embed_dim, name movie_categories_fc_layer, activationtf.nn.relu)#第二层全连接movie_combine_layer tf.concat([movie_id_fc_layer, movie_categories_fc_layer, dropout_layer], 2) #(?, 1, 96)movie_combine_layer tf.contrib.layers.fully_connected(movie_combine_layer, 200, tf.tanh) #(?, 1, 200)movie_combine_layer_flat tf.reshape(movie_combine_layer, [-1, 200])return movie_combine_layer, movie_combine_layer_flat生成Movie特征矩阵 loaded_graph tf.Graph() # movie_matrics [] with tf.Session(graphloaded_graph) as sess: ## Load saved modelloader tf.train.import_meta_graph(load_dir .meta)loader.restore(sess, load_dir)# Get Tensors from loaded modeluid, 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_graphfor item in movies.values:categories np.zeros([1, 18])categories[0] item.take(2)titles np.zeros([1, sentences_size])titles[0] item.take(1)feed {movie_id: np.reshape(item.take(0), [1, 1]),movie_categories: categories, #x.take(6,1)movie_titles: titles, #x.take(5,1)dropout_keep_prob: 1}movie_combine_layer_flat_val sess.run([movie_combine_layer_flat], feed) movie_matrics.append(movie_combine_layer_flat_val)pickle.dump((np.array(movie_matrics).reshape(-1, 200)), open(movie_matrics.p, wb)) movie_matrics pickle.load(open(movie_matrics.p, moderb))生成User特征矩阵 将训练好的用户特征组合成用户特征矩阵并保存到本地 loaded_graph tf.Graph() # users_matrics [] with tf.Session(graphloaded_graph) as sess: ## Load saved modelloader tf.train.import_meta_graph(load_dir .meta)loader.restore(sess, load_dir)# Get Tensors from loaded modeluid, user_gender, user_age, user_job, movie_id, movie_categories, movie_titles, targets, lr, dropout_keep_prob, _, __,user_combine_layer_flat get_tensors(loaded_graph) #loaded_graphfor item in users.values:feed {uid: np.reshape(item.take(0), [1, 1]),user_gender: np.reshape(item.take(1), [1, 1]),user_age: np.reshape(item.take(2), [1, 1]),user_job: np.reshape(item.take(3), [1, 1]),dropout_keep_prob: 1}user_combine_layer_flat_val sess.run([user_combine_layer_flat], feed) users_matrics.append(user_combine_layer_flat_val)pickle.dump((np.array(users_matrics).reshape(-1, 200)), open(users_matrics.p, wb)) users_matrics pickle.load(open(users_matrics.p, moderb))开始推荐电影 结论 以上就是实现的常用的推荐功能将网络模型作为回归问题进行训练得到训练好的用户特征矩阵和电影特征矩阵进行推荐。
http://www.w-s-a.com/news/198869/

相关文章:

  • 成都市网站建设服务商怎么进网站后台管理系统
  • 企业网站站内优化30岁做网站编辑
  • 与安网站建设网站建设征求意见稿
  • 学校网站推广做网站手把手
  • 网站开发遇到的难题wordpress文章调用
  • 网站建设做的好在线logo免费设计生成器标智客
  • 郑州做网站齿轮网站排名怎么做 site
  • 船员专用网站开发建议wordpress 图片占用id
  • 桌面软件开发跟网站开发那个上海网站备案在哪里查询
  • 罗湖网站建设陕西省建设网官网住房和城乡厅官网
  • 做一个网站的详细教学wordpress 忘记用户名密码
  • 建设银行的网站是多少wordpress添加新页面跳转
  • 网站设计费用抓取网站访客qq号码
  • 驾校视频网站模板郑州网站建设价格
  • 上海 有哪些做网站的公司成都企业网站备案流程
  • 移动端快速建站的方法青海公司网站建设
  • 网站重新搭建程序要多少钱移动互联网应用的使用情况
  • 学建站论坛给别人做网站怎么赚钱吗
  • 响应式网站代码校友会网站建设的目的
  • 北京公司网站网站建设html模板
  • 专门做医疗器械的网站免费网页制作系统团队
  • 网站开发技术 html临夏网站建设
  • flash网站模板免费下载拍卖网站开发多少钱
  • 北京网站建设制作颍州网站建设
  • 网站制作报价表做网站上海公司
  • 简洁大气蓝色文章资讯网站百度搜索广告推广
  • 河南建设工程协会网站网站收银系统建设
  • 网站制作 服务企业网站案例展示
  • 咸宁网站建设wordpress手动降级
  • 昆明做网站建设怎么样做网站赚钱全攻略