首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow 2.0中矩阵分解的WALS方法

tensorflow 2.0中矩阵分解的WALS方法
EN

Stack Overflow用户
提问于 2019-09-12 08:09:34
回答 4查看 3K关注 0票数 2

我正在使用WALS方法来执行矩阵分解。最初在tensorflow 1.13中,我可以使用

代码语言:javascript
复制
from tensorflow.contrib.factorization.python.ops import factorization_ops 

文档所述

可以从factorization_ops调用Wals模型。

代码语言:javascript
复制
factorization_ops.WALSModel

在tensorflow 2.0中使用相同的命令给出以下错误

'tensorflow.contrib.factorization ModuleNotFoundError:没有名为的模块

通过问题,似乎没有办法在tensorflow 2.0+中使用WALSModel。

另外,在tensorflow版本更新中也提到了这里,tf.contrib已被废弃,功能要么迁移到核心TensorFlow API,要么迁移到生态系统项目,如tensorflow/addons或tensorflow/io,或者完全删除。

如何在tensorflow 2.0中使用WALS模型(目前我在windows机器上使用2.0.0-rc0 )?是WALSModel被删除了,还是我遗漏了一些信息?

EN

回答 4

Stack Overflow用户

发布于 2019-09-24 13:21:01

我相信TF-2.0 ...The官方推荐模式是神经协作滤波器不支持WALS

我希望这能帮到你。

票数 3
EN

Stack Overflow用户

发布于 2019-09-24 11:13:09

我也有同样的问题,但不幸的是,我没有时间自己写一个库。我正在考虑几种可能的选择:

  1. 坚持使用TF1.X,直到有人创建库
  2. 切换到使用lightfm继续使用WALS
  3. 切换到神经协作过滤,使用嵌入层与角点和一个点积层。请参阅本文中的https://arxiv.org/abs/1708.05031,以及这个代码实现:
代码语言:javascript
复制
from tensorflow.keras.layers import Input, Embedding, Flatten, Dot, Dense
from tensorflow.keras.models import Model
#import tensorflow.distribute

def get_compiled_model(n_users, n_items, embedding_dims=20):
    # Product embedding
    prod_input = Input(shape=[1], name="Item-Input")
    prod_embedding = Embedding(n_items+1, embedding_dims, name="Item-Embedding")(prod_input)
    prod_vec = Flatten(name="Flatten-Product")(prod_embedding)

    # User embedding
    user_input = Input(shape=[1], name="User-Input")
    user_embedding = Embedding(n_users+1, embedding_dims, name="User-Embedding")(user_input)
    user_vec = Flatten(name="Flatten-Users")(user_embedding)

    # The output is the dot product of the two, i.e. a one-hot vector
    dot_product = Dot(name="Dot-Product", axes=1)([prod_vec, user_vec])

    # compile - uncomment these two lines to make training distributed
    # dist_strat = distribute.Strategy()
    # with dist_strat.scope():
    model = Model(inputs = [user_input, prod_input], outputs = dot_product)
    model.compile(
        optimizer='adam',
        loss='mean_squared_error'
    )
    return model
票数 2
EN

Stack Overflow用户

发布于 2019-12-06 15:24:36

在计算资源和准确性(https://github.com/gtsoukas/cfzoo)方面,我已经将WALS的Tensorflow实现与其他实现进行了比较。比较表明,隐式package (https://github.com/benfred/implicit)是一个很好的替代品,提供了更好的性能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57902387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档