【问题标题】:Generating Vanishing and Exploding gradients problem in RNN using Keras使用 Keras 在 RNN 中生成消失和爆炸梯度问题
【发布时间】:2020-06-28 15:28:30
【问题描述】:

我了解 Vanilla RNN 中的梯度消失和爆炸问题以及为什么会发生这种情况。但是,我想有目的地创造这个问题,以便更好地理解。我从https://www.datatechnotes.com/2018/12/rnn-example-with-keras-simplernn-in.html 获取了以下代码。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, SimpleRNN

# convert into dataset matrix
def convertToMatrix(data, step):
 X, Y =[], []
 for i in range(len(data)-step):
  d=i+step  
  X.append(data[i:d,])
  Y.append(data[d,])
 return np.array(X), np.array(Y)

step = 4
N = 1000    
Tp = 800    

t=np.arange(0,N)
x=np.sin(0.02*t)+2*np.random.rand(N)
df = pd.DataFrame(x)
df.head()

plt.plot(df)
plt.show()

values=df.values
train,test = values[0:Tp,:], values[Tp:N,:]

# add step elements into train and test
test = np.append(test,np.repeat(test[-1,],step))
train = np.append(train,np.repeat(train[-1,],step))
 
trainX,trainY =convertToMatrix(train,step)
testX,testY =convertToMatrix(test,step)
trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))

model = Sequential()
model.add(SimpleRNN(units=32, input_shape=(1,step), activation="relu"))
model.add(Dense(8, activation="relu")) 
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='rmsprop')
model.summary()

model.fit(trainX,trainY, epochs=100, batch_size=16, verbose=2)
trainPredict = model.predict(trainX)
testPredict= model.predict(testX)
predicted=np.concatenate((trainPredict,testPredict),axis=0)

trainScore = model.evaluate(trainX, trainY, verbose=0)
print(trainScore)

我应该如何修改这段代码来产生这个问题?谢谢。

【问题讨论】:

    标签: python keras recurrent-neural-network backpropagation


    【解决方案1】:

    梯度消失是我们使用 sigmoid 激活函数时的问题。如果将relu 更改为sigmoid,可能会遇到梯度消失问题。

    model = Sequential()
    model.add(SimpleRNN(units=32, input_shape=(1,step), activation="sigmoid"))
    model.add(Dense(8, activation="sigmoid"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-24
      • 2018-10-06
      • 2020-06-03
      • 1970-01-01
      • 2021-11-24
      • 2021-09-01
      • 2019-10-07
      • 2023-03-16
      相关资源
      最近更新 更多