Keras 如何使用SimpleRN对模函数建模&;预测多对多序列

Keras 如何使用SimpleRN对模函数建模&;预测多对多序列,keras,recurrent-neural-network,Keras,Recurrent Neural Network,我设计这个玩具问题是为了理解Keras中SimpleRN的工作原理 我的输入顺序是: [x1,x2,x3,x4,x5] 相应的输出为: [(0+x1)%2,(x1+x2)%2,(x2+x3)%2,(x3+x4)%2,(x4+x5)%2)] 我的代码是: 将numpy导入为np 随机输入 从scipy.ndimage.interpolation导入移位 def生成_序列(): 最大长度=5 x=np.random.randint(1100,最大值) 移位_x=移位(x,1,cval=0) y

我设计这个玩具问题是为了理解Keras中
SimpleRN
的工作原理

我的输入顺序是:

 [x1,x2,x3,x4,x5]
相应的输出为:

[(0+x1)%2,(x1+x2)%2,(x2+x3)%2,(x3+x4)%2,(x4+x5)%2)]
我的代码是:

将numpy导入为np
随机输入
从scipy.ndimage.interpolation导入移位
def生成_序列():
最大长度=5
x=np.random.randint(1100,最大值)
移位_x=移位(x,1,cval=0)
y=(x+x)%2
返回x.整形(最大长度,1),y.整形(最大长度,1),移位的x.整形(最大长度,1)
X_列=np.零((100,5,1))
y_列=np.零((100,5,1))
对于范围(100)内的i:
x、 y,z=生成_序列()
X_列[i]=X
y_train[i]=y
X_检验=np.零((100,5,1))
y_检验=np.零((100,5,1))
对于范围(100)内的i:
x、 y,z=生成_序列()
X_检验[i]=X
y_检验[i]=y
从keras.layers导入SimpleRN
模型=顺序()
add(SimpleRNN(3,input_shape=(5,1),return_sequences=True,name='rnn'))
model.add(密集型(1,激活='sigmoid'))
#尝试使用不同的优化器和不同的优化器配置
model.compile(loss='binary\u crossentropy',
优化器='sgd',
指标=[‘准确度’])
打印('Train…'))
模型安装(X_系列、y_系列、,
批次尺寸=70,
epochs=200,verbose=0,validation_split=0.3)
得分,acc=模型评估(X_检验,y_检验,
批次大小=批次大小)
打印('测试分数:',分数)
打印('测试精度:',acc)
当我训练这个
SimpleRNN
时,我只得到50%的准确率,序列中的每个项目仅取决于前一个项目。为什么RNN在努力学习这一点

100/100[====================================]-0s37us/步
考试成绩:0.6975522041320801
测试精度:0.5120000243186951
更新: 结果证明mod函数很难建模,我切换到简单的数据生成策略,比如y[t]=x[t]
def生成rnn序列()
最大长度=5
x=np.random.randint(1100,最大值)
移位_x=移位(x,1,cval=0)
y=(x

那么,如何使用RNN对mod函数进行建模呢?

如果操作是“/2”,我想网络会很容易地学习它(测试它)。但是,因为您使用的是“%2”,所以您的网络应该比单层稍微智能一些。(请通过测试确认)感谢您确认我的直觉。您建议添加哪些内容来改善此网络?我不知道任何具体情况,但可能有很多层具有更多的单位。]我尝试更改为“/2”,并将最后一层更改为仅密集而不激活,使用mse作为损耗。还是没有运气,它学不会anything@DanielMöller请检查问题中的更新