Python 更改嵌入TensorFlow的大小(例如,在推荐引擎中创建新用户)
我有一个基于TensorFlow的推荐系统。每个用户都有与其关联的Python 更改嵌入TensorFlow的大小(例如,在推荐引擎中创建新用户),python,tensorflow,recommendation-engine,Python,Tensorflow,Recommendation Engine,我有一个基于TensorFlow的推荐系统。每个用户都有与其关联的1+numFactors数字:一个numFactors向量和一个数字的偏移量。每个任务还分配了一个偏差和numFactors向量。TF-recom代码是 def inference_svd(user_batch, item_batch, user_num, item_num, dim=5): bias_global = tf.get_variable("bias_global", shape=[]) w_bias_
1+numFactors
数字:一个numFactors
向量和一个数字的偏移量。每个任务还分配了一个偏差和numFactors
向量。TF-recom代码是
def inference_svd(user_batch, item_batch, user_num, item_num, dim=5):
bias_global = tf.get_variable("bias_global", shape=[])
w_bias_user = tf.get_variable("embd_bias_user", shape=[user_num])
w_bias_item = tf.get_variable("embd_bias_item", shape=[item_num])
bias_user = tf.nn.embedding_lookup(w_bias_user, user_batch, name="bias_user")
bias_item = tf.nn.embedding_lookup(w_bias_item, item_batch, name="bias_item")
w_user = tf.get_variable("embd_user", shape=[user_num, dim], initializer=tf.truncated_normal_initializer(stddev=0.02))
w_item = tf.get_variable("embd_item", shape=[item_num, dim], initializer=tf.truncated_normal_initializer(stddev=0.02))
embd_user = tf.nn.embedding_lookup(w_user, user_batch, name="embedding_user")
embd_item = tf.nn.embedding_lookup(w_item, item_batch, name="embedding_item")
infer = tf.reduce_sum(tf.multiply(embd_user, embd_item), 1)
infer = tf.add(infer, bias_global)
infer = tf.add(infer, bias_user)
infer = tf.add(infer, bias_item, name="svd_inference")
regularizer = tf.add(tf.nn.l2_loss(embd_user), tf.nn.l2_loss(embd_item), name="svd_regularizer")
return infer, regularizer
我已经能够让这段代码正常工作,并且能够将它与REST-API连接起来
我遇到的问题是当我获得新用户时。我知道我想做什么:
- 向
bias\u用户添加一行,初始化为0
- 向
embd\u用户添加一行,初始化为0
- 当用户对新项目进行评分时,我们使用相同的图表,但
冻结项目的权重(我可以使用
optimizer.minimize上的
)var\u list
numpy
中实现了这一点,我只需将新行添加到相应的矩阵中即可。有两种方法可以做到这一点,例如创建新的图形和变量,但似乎最好首先重用用于训练模型的图形(以确保一致性)
我正在寻找一个处理改变嵌入张量大小的“最佳实践”系统,特别是一个在线系统,它必须快速提供预测服务(防止昂贵的操作).在系统中添加新用户时,最基本的困难在于需要重新培训,以便能够为新用户提供有意义的预测。即使您能够动态调整嵌入矩阵的大小,您会使用哪些值作为描述新用户的参数 考虑到这一点,您有两个选择
第一类模型的一个实现是:;对于第二堂课,请查看我的推荐人系统包。在系统中添加新用户时,最基本的困难在于需要重新培训,以便能够为新用户提供有意义的预测。即使您能够动态调整嵌入矩阵的大小,您会使用哪些值作为描述新用户的参数 考虑到这一点,您有两个选择
第一类模型的一个实现是:;对于第二节课,请查看我的推荐系统包。谢谢您提供的其他选择,我一定会看一看。我有一个
numpy
模型,在这个模型中,我手工实现了SGD,初始化新用户也不错:存在全局偏差和每项偏差,所以我们只需将新用户权重设置为零(最初),然后将用户偏差设置为平均值(应该接近零)。我使用TF来(a)获得使用它的经验,(b)使用更好的优化器。我很好奇是否有更灵活的方法(例如,我们可以使用占位符而不指定其大小)来确保我有效地使用TF。感谢您的替代方案,我一定会看看。我有一个numpy
模型,在这个模型中,我手工实现了SGD,初始化新用户也不错:存在全局偏差和每项偏差,所以我们只需将新用户权重设置为零(最初),然后将用户偏差设置为平均值(应该接近零)。我使用TF来(a)获得使用它的经验,(b)使用更好的优化器。我很好奇是否有更灵活的应用程序