python - 将 numpy 方程转换为 Keras 后端损失函数方程
问题描述
我正在研究生成音乐的模型。我所有的训练数据都使用相同的调和模式,C 大调。我有一个keyspace
形状为 (n,) 的 numpy 数组,它代表我键盘上的按键总数(以半音阶)。该数组中带有 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
推荐阅读
- c# - 依赖注入容器是单例吗?
- javascript - 使用 Javascript 查找数组的峰值
- unity3d - 3D 网格在运行时展开为 2D
- ios - 使用 RxSwift、TDD 和 MVVM 以编程方式实现 UIButton
- web - 如何在网站中设置特定位置的图表?
- docker - Centos 和 MacOS 不同的 Docker 卷挂载权限策略
- algorithm - 检查提交的作业之间的相似性百分比的最佳算法是什么?
- mule - Mulesoft 开发环境(Anypoint Studio 版本)
- java - 面对 org.hibernate.type.SerializationException:无法反序列化
- angular - 无法读取 AdminProductsComponent.onclickfetch() 处未定义的属性“订阅”