Я вижу следующие ошибки:
ValueError: Градиенты не указаны ни для одной переменной: ["", "", "", "", "", ""].
Я составил настраиваемую функцию потерь (kl_loss):
def tensor_pValue(pnls,pnl):
vec=tf.contrib.framework.sort(pnls,axis=-1,direction='ASCENDING')
rank_p=tf.divide(tf.range(0,264.5,1),264.0)
return tf.gather(rank_p, tf.searchsorted(vec,pnl,side='left'))
def kl_divergence(p, q):
epsilon = 0.00001
p=p+epsilon
q=q+epsilon
return tf.reduce_sum(p * tf.log(p/q))
def kl_loss(predicted_pnL,actual_pnl_tensor):
p_dist=tf.squeeze(tf.map_fn(lambda inp:tensor_pValue(inp[0],inp[1]),
(predicted_pnL,actual_pnl_tensor),dtype=tf.float32))
u_dist=tf.random.uniform([264],0,1,dtype=tf.float32)
return kl_divergence(p_dist,u_dist)
Затем я составил модель NN, используя Keras:
optimizer = tf.train.AdamOptimizer(0.001)
input_dim = X_train.shape[1]
model = keras.Sequential([
keras.layers.Dense(UNITS, activation=tf.nn.relu,
input_dim=input_dim),
keras.layers.Dense(UNITS, activation=tf.nn.relu),
keras.layers.Dense(264)
])
model.compile(loss=lambda y, f: kl_loss(f,y), optimizer=optimizer)
model.fit(X_train, train_y, epochs=EPOCHS, batch_size=BATCH_SIZE,verbose=0)
Я думаю, что могут быть некоторые разрывы между моей потерейи вес, потому что моя потеря на самом деле агрегируется за партию.
Может кто-нибудь помочь взглянуть на проблему?
Большое спасибо!