Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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 修正tensorflow中ANN的NaN值/损失_Python_Tensorflow_Machine Learning_Nan - Fatal编程技术网

Python 修正tensorflow中ANN的NaN值/损失

Python 修正tensorflow中ANN的NaN值/损失,python,tensorflow,machine-learning,nan,Python,Tensorflow,Machine Learning,Nan,我使用tensorflow运行了一个客户流失模型,并遇到了一个损失。环顾四周,我发现我的数据中可能有一些NaN值,正如print(np.any(np.isnan(X_测试))所证实的那样 我试着用 def标准化(列车、测试): 平均值=np.平均值(列车,轴=0) 标准=np.标准(列车,轴=0)+0.000001 X_序列=(序列-平均值)/std X_检验=(检验-平均值)/std 返回X_列车,X_测试 但仍然提出了NaN价值观 以下是完整的代码(如果有帮助): 将numpy导入为np

我使用tensorflow运行了一个客户流失模型,并遇到了一个损失。环顾四周,我发现我的数据中可能有一些NaN值,正如
print(np.any(np.isnan(X_测试))
所证实的那样

我试着用

def标准化(列车、测试): 平均值=np.平均值(列车,轴=0) 标准=np.标准(列车,轴=0)+0.000001 X_序列=(序列-平均值)/std X_检验=(检验-平均值)/std 返回X_列车,X_测试 但仍然提出了NaN价值观

以下是完整的代码(如果有帮助):

将numpy导入为np
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
导入tensorflow作为tf
dataset=pd.read\u excel('chorn DATA.xlsx')
X=dataset.iloc[:,2:45]。值
y=dataset.iloc[:,45]。值
从sklearn.preprocessing导入标签编码器
le=标签编码()
X[:,1]=le.fit_变换(X[:,1])
从sklearn.compose导入ColumnTransformer
从sklearn.preprocessing导入OneHotEncoder
ct=ColumnTransformer(transformers=[('encoder',onehotcoder(),[0])],余数='passthrough')
X=np.array(ct.fit_变换(X))
从sklearn.model\u选择导入列车\u测试\u拆分
X_系列,X_测试,y_系列,y_测试=系列测试分割(X,y,测试尺寸=0.2)
从sklearn.preprocessing导入StandardScaler
sc=StandardScaler()
X_序列=sc.fit_变换(X_序列)
X_测试=sc.transform(X_测试)
ann=tf.keras.models.Sequential()
ann.add(tf.keras.layers.density(单位=43,激活=relu'))
ann.add(tf.keras.layers.density(单位=43,激活=relu'))
ann.add(tf.keras.layers.density(单位=1,激活='sigmoid'))
compile(优化器='adam',loss='binary\u crossentropy',metrics=['accurity'])
ann.fit(X列,y列,批量大小=256,历代=50)

您尚未替换
nan
值。而且数据中可能也有一些
inf
-inf
值。您可以用
0

用于数据帧

X.replace([np.inf, -np.inf], np.nan, inplace=True)
X = X.fillna(0)
或者如果您的数据位于numpy数组中

X[np.isnan(X)] = 0

X[X == np.inf] = 0 
X[X == -np.inf] = 0

dataset=pd.read\u excel('CHURN DATA.xlsx')
add
dataset=dataset.dropna()
。正如下面所建议的,我正在处理一些输入中的负值(透支支票账户余额等),它正在删除80%的数据,因为dropna函数在找到nan后将删除整行,即使它只是一行。改用fillna。我在一些输入中使用负值(透支支票账户余额等)。当我尝试此操作时,我得到以下错误“numpy.ndarray”对象没有属性“replace”,我假设您的数据位于数据帧中,但显然数据位于numpy数组中。因此,您可以将数据转换为dataframe并使用上面的解决方案,或者使用以下方法:
X[X==np.inf]=0 X[X==np.inf]=0
。我已经编辑了我的答案。在对分类变量进行编码后,我运行了'X[X==np.inf]=0 X[X==-np.inf]=0',但仍然得到打印(np.any(np.isnan(X_测试))=True之后,仍然遇到了nan损失运行此命令
X[np.isnan(X)]=0
。另外,您将此替换方法放在代码中的何处?成功!我使用'X.replace([np.inf,-np.inf],np.nan,inplace=True)X=X.fillna(0)`作为
dataset.replace([np.inf,-np.inf],np.nan,inplace=True)dataset=dataset.fillna(0)
。模型运行平稳,最终精度为0.99。谢谢