Source code for mfmodel
from __future__ import print_function
import tensorflow as tf
from antk.core import config
from antk.core import generic_model
from antk.core import node_ops
from antk.core import loader
[docs]def mf(data, configfile, lamb=0.001,
kfactors=20,
learnrate=0.01,
verbose=True,
epochs=1000,
maxbadcount=20,
mb=500,
initrange=1,
eval_rate=500,
random_seed=None,
develop=False,
train_dev_eval_factor=3):
with tf.name_scope('ant_graph'):
ant = config.AntGraph(configfile,
data=data.dev.features,
marker='-',
graph_name='basic_mf',
develop=develop,
variable_bindings={'kfactors': kfactors,
'initrange': initrange})
y = ant.tensor_out
y_ = tf.placeholder("float", [None, None], name='Target')
ant.placeholderdict['ratings'] = y_
with tf.name_scope('objective'):
objective = (tf.reduce_sum(tf.square(y_ - y)))
objective += (lamb*tf.reduce_sum(tf.square(ant.tensordict['huser'])) +
lamb*tf.reduce_sum(tf.square(ant.tensordict['hitem'])) +
lamb*tf.reduce_sum(tf.square(ant.tensordict['ubias'])) +
lamb*tf.reduce_sum(tf.square(ant.tensordict['ibias'])))
with tf.name_scope('dev_rmse'):
_rmse = node_ops.rmse(y_, y)
mae = node_ops.mae(y_, y)
model = generic_model.Model(objective, ant.placeholderdict,
mb=mb,
learnrate=learnrate,
verbose=verbose,
maxbadcount=maxbadcount,
epochs=epochs,
evaluate=_rmse,
train_evaluate=_rmse,
predictions=y,
model_name='mf',
random_seed=random_seed,
save_tensors={'mae': mae})
model.train(data.train, dev=data.dev, eval_schedule=eval_rate,train_dev_eval_factor= train_dev_eval_factor)
return model