我已经为光学应用建立了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来推断性能,并可能回答您的问题。希望对您有所帮助。