Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于连续输入和连续输出的Keras LSTM_Python_Machine Learning_Keras_Lstm_Rnn - Fatal编程技术网

Python 用于连续输入和连续输出的Keras LSTM

Python 用于连续输入和连续输出的Keras LSTM,python,machine-learning,keras,lstm,rnn,Python,Machine Learning,Keras,Lstm,Rnn,例如,我有二进制数据,比如:0,0,0,1,1,0,1,1。这可能会无限期地继续下去。对于每个输入,都有相应的输出。假设我们使用XOR运算。所以,输出可能是这样的:0,0,0,1,0,1,1,0 如何塑造Keras输入形状?如何设置时间步长?如果我声明时间步1对于每个1时间步视为不同的情况,或者它仍然可以考虑以前的输入作为序列或学习内存 Keras使用LSTM或GRU作为其隐藏层 我试过两种方法来解决这个问题,但似乎都没有成功。两种方法都停留在37.5,事实上,它一直在猜测1 方法1: data

例如,我有二进制数据,比如:0,0,0,1,1,0,1,1。这可能会无限期地继续下去。对于每个输入,都有相应的输出。假设我们使用XOR运算。所以,输出可能是这样的:0,0,0,1,0,1,1,0

如何塑造Keras输入形状?如何设置时间步长?如果我声明时间步1对于每个1时间步视为不同的情况,或者它仍然可以考虑以前的输入作为序列或学习内存

Keras使用LSTM或GRU作为其隐藏层

我试过两种方法来解决这个问题,但似乎都没有成功。两种方法都停留在37.5,事实上,它一直在猜测1

方法1:

data = [[[0], [0], [0], [1], [1], [0], [1], [1]]]
output = [[[0], [0], [0], [1], [0], [1], [1], [0]]]

model = Sequential()
model.add(GRU(10, input_shape=(8, 1), return_sequences=True))
model.add(GRU(10, return_sequences=True))
model.add(Dense(1, activation='softmax'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
model.fit(np.asarray(data), np.asarray(output), epochs=3000)
方法2:

data = [[[0]], [[0]], [[0]], [[1]], [[1]], [[0]], [[1]], [[1]]]
output = [[0], [0], [0], [1], [0], [1], [1], [0]]

model = Sequential()
model.add(GRU(10, input_shape=(1, 1), return_sequences=True))
model.add(GRU(10))
model.add(Dense(1, activation='softmax'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
model.fit(np.asarray(data), np.asarray(output), epochs=300)
事实上,它一直在猜测1


这是因为您使用了
softmax
作为最后一层的激活。由于最后一层只有一个单元,softmax函数将其输入标准化,使元素之和等于一,因此它将始终输出1。相反,您需要使用
sigmoid
作为最后一层的激活函数,以使输出介于0和1之间。

activation='softmax'
更改为
activation='sigmoid'