将 numpy 方程转换为 Keras 后端损失函数方程



我正在研究一个生成音乐的模型。我所有的训练数据都处于相同的键和模式,C 大调。我有一个形状为 (n,( 的 numpy 数组keyspace,表示键盘上的键总数(以半音阶表示(。该数组中带有 1 的插槽是 C 大调的键;具有 0 的插槽不在 C 大调中。

该模型预测应以数组y_pred的形式按下哪些键。我想在我的损失函数中添加一个术语,该术语会惩罚模型按下不是 C 大调的键。也就是说,我不想因为未能在键空间中按键而惩罚我的模型(因为并非每个节拍都使用音阶中的每个键!在numpy中,我可以这样做:

import numpy as np
keyspace = np.array( [0, 1, 0, 1, 0, 1] )
y_pred   = np.array( [1, 0, 0, 1, 0, 1] )
loss_term = 0
for idx, i in enumerate(y_pred):
if i:
if not keyspace[idx]:
loss_term += 1
loss_term

我现在想将其转换为 Keras 后端函数,这意味着对其进行矢量化。有人看到这样做的好方法吗?任何指示都会非常有帮助!

你的代码基本上是:

((1-keyspace) * y_pred).sum()

测试:

def loop_loss(keyspace, y_pred):
loss_term = 0
for idx, i in enumerate(y_pred):
if i and not keyspace[idx]:
loss_term += 1
return loss_term
keyspace, y_pred = np.random.choice([0,1], (2,10))
loop_loss(keyspace, y_pred) == ((1-keyspace) * y_pred).sum()
# True

最新更新