使用Tensorflow最大化奖励功能

时间:2019-01-06 17:57:51

标签: python tensorflow machine-learning neural-network

我对Tensorflow很陌生,并试图最大化某种依赖于神经网络输出的奖励函数。我的网络看起来像这样:

x = tf.placeholder(tf.float32, [None, 1])

with tf.variable_scope("weights", reuse=tf.AUTO_REUSE):
    A1 = tf.get_variable("A1", shape=[q1, d], 
initializer=tf.contrib.layers.xavier_initializer())
    b1 = tf.get_variable("b1", shape=[q1,1], 
initializer=tf.contrib.layers.xavier_initializer())
    A2 = tf.get_variable("A2", shape=[q2,q1], 
initializer=tf.contrib.layers.xavier_initializer())
    b2 = tf.get_variable("b2", shape=[q2,1], 
initializer=tf.contrib.layers.xavier_initializer())
    A3 = tf.get_variable("A3", shape=[1,q2], 
initializer=tf.contrib.layers.xavier_initializer())
    b3 = tf.get_variable("b3", shape=[1,1], 
initializer=tf.contrib.layers.xavier_initializer())

layer1 = tf.nn.relu(tf.matmul(A1,x) + b1)
layer2 = tf.nn.relu(tf.matmul(A2,layer1) + b2)
output = tf.nn.sigmoid(tf.matmul(A3,layer2) + b3)

因此它具有d维输入,两个具有q1q2单位的隐藏层以及一个输出单位。我的训练数据集xtrain由M d维矢量组成,这些矢量会产生如下奖励:

  reward = 0
  for i in range M
       xtrain[i] = ... # [d,1] vector
       reward = reward + 1/M * (g(xtrain[i]) *output)

其中g是一些功能,具体取决于训练集的条目,而output应该是在将xtrain[i]输入上述网络时创建的值。

我想做的是最大化reward(或最小化-reward)。我如何使用AdamOptimizer做到这一点?我试图通过简单地调用train = tf.train.AdamOptimizer().minimize(-reward)然后执行tf.Session.run(train, feed_dict = {x: xtrain})来调用它,但是它一直都在运行。

0 个答案:

没有答案