keras - 如何调试 RNN?
问题描述
我已经为光学应用建立了一个 ResNet50 网络。对于两个输入图像,网络给出了 65 个值的估计值(回归)并且效果很好。然而,这两个输入图像属于一个时间序列,并且时间序列的图像在 10-15 次的跨度上会有一定的相关性,所以我希望额外的 RNN 可以改进估计。我尝试设置图中所示的网络,使用通过单独训练和“TimeDistributed”ResNet50s 找到的大部分冻结的 ResNet50 参数值。然而,RNN 训练并没有给出有用的准确性。
我现在花了 2-3 周的时间尝试调试我的代码(特别是生成器),但我没有发现任何编码错误。无奈之下,我尝试建立我能想到的最简单的 RNN:一个完整的 Resnet50,其中包含一个或两个具有线性激活的 SimpleRNN。然而,尽管有相关的时间序列,但它们甚至不能提供与单独的 ResNet50 几乎相同的准确度。
所以我的问题是:假设具有线性激活的单个 SimpleRNN 应该提供与单独的 ResNet50 相同的精度是否正确?
解决方案
这有点推测,但它可能会建议一种调试 RNN 并回答您的问题的方法。这是一个非常简单的网络,带有一个 SimpleRNN 和 2 个样本的测试输入,每个样本都有一个时间步长和一个特征:即 shape=(2,1,1)
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))
基于上述运行,RNN 网络产生了两个权重。第一个似乎是输入的简单缩放,第二个我怀疑是循环循环的权重,如本例所示,它实际上并未用于单个时间步长。激活是线性的,因此结果与 model.predict 匹配。
您可以扩展此方法以推理 Resnet 的性能并可能回答您的问题。我希望这有帮助。
推荐阅读
- html - Django 不接收 HTML 表单中的 POST 方法
- c++ - 为什么我无法使用索引访问字符串单个字符
- arangodb - ArangoDB:相关文档的遍历条件
- r - visreg 在 R 中绘制 GAM 响应时在 y 轴上显示地毯
- javascript - 这是在 Vue 中下载文件的正确方法吗?
- javascript - 在 React 中,为什么这个 onClick 代码片段可以工作,但我尝试用其他方式编写它却不行?
- string - “借来的价值不够长”,在循环中使用时被丢弃
- python - 如何根据列索引将字符串 True / False Pandas 列转换为 int?
- android - Android - 应用 TextStyle“粗体”删除自定义字体设置
- javascript - 如何跟踪按钮的点击?