Проблема с простой пользовательской функцией потерь в Tensorflow - PullRequest
0 голосов
/ 14 января 2020

Я только что написал следующий код:

import tensorflow as tf
m = 5
sigma = 0.2
rf = 0.1
learning_rate = 0.5

batch_size = 32
x_train = tf.compat.v1.random_normal(shape = (batch_size, m))
x_train = tf.exp((rf - 0.5 * sigma ** 2) + sigma * x_train)

W1 = tf.Variable(tf.compat.v1.random_normal([m, m+10], stddev = 0.03), name = 'W1')
b1 = tf.Variable(tf.compat.v1.random_normal([m+10]), name = 'b1')
W2 = tf.Variable(tf.compat.v1.random_normal([m+10,m], stddev = 0.03), name = 'W2')
b2 = tf.Variable(tf.compat.v1.random_normal([m]), name = 'b2')

hidden_out = tf.add(tf.matmul(x_train,W1), b1)
hidden_out = tf.nn.relu(hidden_out)
b = tf.nn.softmax(tf.add(tf.matmul(hidden_out, W2), b2))
c = tf.multiply(b, x_train)

to_minimize = tf.reduce_sum(tf.multiply(b, x_train), axis = 1)

optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate = learning_rate).minimize(-tf.reduce_mean(to_minimize))

Прежде всего я определил тензор x_train. После этого я начал определять NN-структуру, которая выдает b.

. Моя цель - обучить нейронную сеть, чтобы максимизировать для каждого образца скалярное произведение между входом x и выходом. нейронной сети.

По этой причине я определил вектор c, а затем попытался свести к минимуму -tf.reduce_mean(to_minimize).

Однако, код дается с выводом

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/Users/Marcello/Library/Preferences/PyCharm2019.2/scratches/scratch_1.py", line 27, in <module>
    optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate = learning_rate).minimize(-tf.reduce_mean(to_minimize))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_core/python/training/optimizer.py", line 403, in minimize
    grad_loss=grad_loss)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_core/python/training/optimizer.py", line 481, in compute_gradients
    "`loss` passed to Optimizer.compute_gradients should "
RuntimeError: `loss` passed to Optimizer.compute_gradients should be a function when eager execution is enabled.

Я не знаю, как это значит и как это исправить. Заранее спасибо.

...