gpt4 book ai didi

tensorflow - Torch 或 Tensorflow 中的通用循环神经网络

转载 作者:行者123 更新时间:2023-12-03 16:27:45 26 4
gpt4 key购买 nike

我正在尝试实现 this recurrent neural network (这是一个语音事件检测器):

rnn

请注意,那些蓝色圆圈是单个神经元——它们不代表很多神经元。这是一个非常小的网络。还有一些额外的细节,例如 S 的含义以及某些层是二次的但它们对这个问题无关紧要的事实。

我使用微软的 CNTK 实现了它像这样(未测试!):

# For the layers with diagonal connections.
QuadraticWithDiagonal(X, Xdim, Ydim)
{
OldX = PastValue(Xdim, 1, X)
OldY = PastValue(Ydim, 1, Y)

Wqaa = LearnableParameter(Ydim, Xdim)
Wqbb = LearnableParameter(Ydim, Xdim)
Wqab = LearnableParameter(Ydim, Xdim)
Wla = LearnableParameter(Ydim, Xdim)
Wlb = LearnableParameter(Ydim, Xdim)
Wlc = LearnableParameter(Ydim, Xdim)
Wb = LearnableParameter(Ydim)

XSquared = ElementTimes(X, X)
OldXSquared = ElementTimes(OldX, OldX)
CrossXSquared = ElementTimes(X, OldX)

T1 = Times(Wqaa, XSquared)
T2 = Times(Wqbb, OldXSquared)
T3 = Times(Wqab, CrossXSquared)

T4 = Times(Wla, X)
T5 = Times(Wlb, OldX)
T6 = Times(Wlc, OldY)

Y = Plus(T1, T2, T3, T4, T5, T6, Wb)
}
# For the layers without diagonal connections.
QuadraticWithoutDiagonal(X, Xdim, Ydim)
{
OldY = PastValue(Ydim, 1, Y)

Wqaa = LearnableParameter(Ydim, Xdim)
Wla = LearnableParameter(Ydim, Xdim)
Wlc = LearnableParameter(Ydim, Xdim)
Wb = LearnableParameter(Ydim)

XSquared = ElementTimes(X, X)

T1 = Times(Wqaa, XSquared)
T4 = Times(Wla, X)
T6 = Times(Wlc, OldY)

Y = Plus(T1, T4, T6, Wb)
}
# The actual network.

# 13x1 input PLP.
I = InputValue(13, 1, tag="feature")
# Hidden layers
H0 = QuadraticWithDiagonal(I, 13, 3)
H1 = QuadraticWithDiagonal(H0, 3, 3)
# 1x1 Pre-output
P = Tanh(QuadraticWithoutDiagonal(H1, 3, 1))
# 5x1 Delay taps
D = QuadraticWithoutDiagonal(P, 1, 5)
# 1x1 Output
O = Tanh(QuadraticWithoutDiagonal(D, 5, 1))
PastValue()函数从上一个时间步获取层的值。这使得实现像这样的不寻常 RNN 变得非常容易。

不幸的是,尽管 CNTK 的网络描述语言非常棒,但我发现您无法编写数据输入、训练和评估步骤的脚本这一事实相当受限制。所以我正在考虑在 Torch 或 Tensorflow 中实现相同的网络。

不幸的是,我已经阅读了两者的文档,但我不知道如何实现循环连接。这两个库似乎都将 RNN 等同于 LSTM 黑匣子,您可以将它们堆叠起来,就好像它们是非循环层一样。似乎没有等效于 PastValue()并且所有不只是使用预制 LSTM 层的示例都是完全不透明的。

谁能告诉我如何在 Torch 或 Tensorflow(或两者!)中实现这样的网络?

最佳答案

我是微软员工。 CNTK 目前正在组件化,其关键的高级构建块将以 C++/Python 库的形式提供。目标是通过实现可扩展性、与外部代码的互操作性和可组合性来提高工具包使用的灵活性。这些库组件组合和互操作以形成深度学习工作负载所需的核心训练和评估功能。该库还允许在外部实现这些组件中的一个或多个,从而能够使用 CNTK 的库组件组合外部 C++/Python 代码和库。预计这将在 8 月底完成。

关于tensorflow - Torch 或 Tensorflow 中的通用循环神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com