Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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损失为NaN,acc 0_Python_Tensorflow_Machine Learning_Keras_Lstm - Fatal编程技术网

Python Keras LSTM损失为NaN,acc 0

Python Keras LSTM损失为NaN,acc 0,python,tensorflow,machine-learning,keras,lstm,Python,Tensorflow,Machine Learning,Keras,Lstm,我试图训练一个LSTM网络,但损失总是NaN。我的数据在0和1之间缩放,所以我不认为爆炸梯度是一个问题。是什么导致了这个问题 将熊猫作为pd导入 从集合导入defaultdict作为dd 将numpy作为np导入 导入tensorflow作为tf 从tensorflow.keras.dataset导入imdb 从tensorflow.keras.models导入顺序 从tensorflow.keras.layers导入稠密 从tensorflow.keras.layers导入LSTM 从tens

我试图训练一个LSTM网络,但损失总是
NaN
。我的数据在0和1之间缩放,所以我不认为爆炸梯度是一个问题。是什么导致了这个问题

将熊猫作为pd导入
从集合导入defaultdict作为dd
将numpy作为np导入
导入tensorflow作为tf
从tensorflow.keras.dataset导入imdb
从tensorflow.keras.models导入顺序
从tensorflow.keras.layers导入稠密
从tensorflow.keras.layers导入LSTM
从tensorflow.keras.layers导入Conv1D
从tensorflow.keras.layers导入MaxPoolig1d
从tensorflow.keras.layers导入退出
从tensorflow.keras.layers导入时间分布
从tensorflow.keras.layers导入展平
从tensorflow.keras.Loss导入稀疏分类交叉熵
从tensorflow.keras导入优化器
将matplotlib.pyplot作为plt导入
GPU=tf.config.experimental.list\u物理\u设备('GPU'))
tf.config.experimental.set_memory_growth(GPU[0],True)
data=pd.read\u csv(r“D:\ML\u Datasets\Signal\Myo\s1\data.csv”)
纪元=100
批量大小=16
最大长度=1000
样本_dict=dd(λ:{})
def正常化(v):#缩放到[0,1]
范数=(v-np.min(v))/np.ptp(v)
返回范数
def get_重复(y):
样本dict[str(y.loc[y.index[0],“刺激”])][str(y.loc[y.index[0],“重复”])]=y.iloc[:,2:]to_numpy()
def get_刺激(x):
如果x.loc[x.index[0],“刺激”]==0:
返回
x、 分组方式(“重复”)。应用(获取重复)
data.groupby(“刺激”).apply(获取刺激)
X=[]
Y=[]
对于样本中的stim_dict.keys():
对于示例中的rep\u dict[stim].keys():
VAL=np.数组(样本记录[stim][rep])
VAL=标准化(VAL)
pad=np.zero(shape=(MAX_LEN-vals.shape[0],16))
X.append(np.concatenate((vals,pad),axis=0))
Y.append(int(stim))
X=np.数组(X)#(721000,16)
Y=np.数组(Y)#(72,)
打印(np.最小值(X)、np.最大值(X))
模型=顺序()
model.add(LSTM(100,输入_shape=X[0].shape))
添加(密集(12,activation=“softmax”))
优化器=优化器.Adam()
compile(优化器=优化器,loss=“sparse\u categorical\u crossentropy”,metrics=['accurity']))
打印(model.summary())
#拟合模型
历史=模型.fit(X,Y,历代=历代,批量大小=批量大小)

这是一个爆炸性梯度问题(与输入缩放无关),因为有1000个时间步的序列,梯度正在爆炸。为什么1000个时间步意味着爆炸性梯度?一个循环网络一遍又一遍地应用相同的函数,时间步数就是应用此函数的次数,因此,时间步长越长,出现梯度的可能性越大exploding@Harry斯图尔特-你有没有尝试过用relu作为激活添加一个密集的隐藏层。这是一个爆炸性的梯度问题(与输入缩放无关),因为你有1000个时间步的序列,梯度在爆炸。为什么1000个时间步意味着梯度在爆炸?一个循环网络一遍又一遍地应用相同的函数,时间步的数量是这个函数应用的次数,所以时间步越长,更多的梯度机会exploding@Harry斯图尔特-你有没有尝试过用relu作为激活添加一个密集的隐藏层。