Keras 如何调试RNN?

Keras 如何调试RNN?,keras,regression,lstm,recurrent-neural-network,resnet,Keras,Regression,Lstm,Recurrent Neural Network,Resnet,我已经为一个光学应用程序建立了一个ResNet50网络。对于两个输入图像,网络给出了65个值的估计值(回归),并且运行良好。然而,这两个输入图像属于一个时间序列,并且时间序列的图像在10-15倍的时间跨度内会有一定的相关性,因此我希望额外的RNN可以改进估计。我尝试设置图中所示的网络,使用通过单独的训练和“时间分布”的ResNet50找到的大部分冻结的ResNet50参数值。然而,RNN训练不能提供有用的准确性 我现在花了2-3周的时间试着调试我的代码(特别是生成器),但我没有发现任何编码错误

我已经为一个光学应用程序建立了一个ResNet50网络。对于两个输入图像,网络给出了65个值的估计值(回归),并且运行良好。然而,这两个输入图像属于一个时间序列,并且时间序列的图像在10-15倍的时间跨度内会有一定的相关性,因此我希望额外的RNN可以改进估计。我尝试设置图中所示的网络,使用通过单独的训练和“时间分布”的ResNet50找到的大部分冻结的ResNet50参数值。然而,RNN训练不能提供有用的准确性

我现在花了2-3周的时间试着调试我的代码(特别是生成器),但我没有发现任何编码错误。在挫折中,我试图建立我能想到的最简单的RNN:一个完整的Resnet50,带有一个或两个带有线性激活的SimpleRNS。然而,尽管存在相关的时间序列,它们甚至不能提供与单独的ResNet50几乎相同的精度


所以我的问题是:假设一个具有线性激活的单一SimpleRN应该提供与单独的ResNet50相同的精度,这是正确的吗

这有点推测性,但它可能建议一种调试RNN并回答您问题的方法。这是一个非常简单的网络,有一个SimpleRN和两个样本的测试输入,每个样本都有一个时间步长和一个特征:即shape=(2,1,1)

在运行上述步骤的基础上,从RNN网络中得出两个权重。第一个似乎是输入的简单缩放,第二个我怀疑的是循环循环的权重,它实际上没有像本例中那样用于单个时间步。激活是线性的,因此结果与模型匹配。预测

您可以将此方法扩展到有关Resnet性能的原因,并可能回答您的问题。我希望这有帮助

from keras.models import Sequential
from keras.layers import SimpleRNN
import numpy as np

x_train=np.array([[[0.1]],
                  [[0.2]]])

y_train=np.array([[1],[0]])
print(x_train.shape)
print(x_train)

print(y_train.shape)
print(y_train)

#simple network
model = Sequential()
model.add(SimpleRNN(1,activation=None, use_bias=False, input_shape=(1,1)))
model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])

model.fit(x_train, y_train, epochs=10, batch_size=2)

wgt=model.get_weights()
print(wgt)
print('model.predict(x_train)')
print(model.predict(x_train))