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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/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 为什么神经网络不学习?_Python_Tensorflow_Keras_Neural Network - Fatal编程技术网

Python 为什么神经网络不学习?

Python 为什么神经网络不学习?,python,tensorflow,keras,neural-network,Python,Tensorflow,Keras,Neural Network,我正在用一个简单的数据集训练一个神经网络。我尝试了不同的参数组合、优化器、学习率。。。但即使经历了20个时代,网络仍然没有学到任何东西 我想知道下面代码中的问题在哪里 from tensorflow.keras.models import Sequential, load_model from tensorflow.keras.layers import Input, Dense, Flatten from tensorflow import keras from livelossplot i

我正在用一个简单的数据集训练一个神经网络。我尝试了不同的参数组合、优化器、学习率。。。但即使经历了20个时代,网络仍然没有学到任何东西

我想知道下面代码中的问题在哪里

from tensorflow.keras.models import  Sequential, load_model
from tensorflow.keras.layers import Input, Dense, Flatten
from tensorflow import keras
from livelossplot import PlotLossesKeras
from keras.models import Model
from sklearn.datasets import make_classification
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd


seed = 42

X, y = make_classification(n_samples=100000, n_features=2, n_redundant=0, 
                           n_informative=2, random_state=seed)

print(f"Number of features: {X.shape[1]}")
print(f"Number of samples: {X.shape[0]}")


df = pd.DataFrame(np.concatenate((X,y.reshape(-1,1)), axis=1))
df.set_axis([*df.columns[:-1], 'Class'], axis=1, inplace=True)

df['Class'] = df['Class'].astype('int')
X = df.drop('Class', axis=1)
y = df['Class']

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

print(f"Train set: {X_train.shape}")
print(f"Validation set: {X_val.shape}")


scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))
X_val_scaled = scaler.transform(X_val.astype(np.float64))

inputs = Input(shape=X_train_scaled.shape[1:])
h0 = Dense(5, activation='relu')(inputs)
h1 = Dense(5, activation='relu')(h0)
preds = Dense(1, activation = 'sigmoid')(h1)

model = Model(inputs=inputs, outputs=preds)
opt = keras.optimizers.Adam(lr=0.0001)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(X_train_scaled, y_train, batch_size=128, epochs=20, verbose=0,
                    validation_data=(X_val_scaled, y_val),
                    callbacks=[PlotLossesKeras()]) 

score_train = model.evaluate(X_train_scaled, y_train, verbose=0)
score_test = model.evaluate(X_val_scaled, y_val, verbose=0) 
print('Train score:', score_train[0])
print('Train accuracy:', score_train[1])
print('Test score:', score_test[0])
print('Test accuracy:', score_test[1])
代码生成以下类型的输出


您使用了错误的损失函数,请更改此行

model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
比如,

model.compile(optimizer=opt, loss='mse', metrics=['accuracy'])
分类交叉熵需要一个热编码的
y
,这意味着每个类都必须有
0
1
。MSE只是均方误差,所以它可以工作。但你也可以尝试其他损失

您的
y

[1,0,1]
[[0,1], [1,0], [0,1]]
一个热编码的
y

[1,0,1]
[[0,1], [1,0], [0,1]]

您是否能够提供可复制的代码片段?请参阅,请提供数据samples@User1010你是说堆栈片段吗?在文档中,只讨论HTML、JavaScript或CSS,而不是python。我不知道你的意思是什么…@Marcin函数make_classification from sklearn.dataset用于代码中提供example@PranavHosangadi,我想说,就一个DL问题而言,这没那么糟糕。调试非常简单。另外,在我安装了一些软件包之后,它就开始工作了。谢谢,更改丢失功能可以让网络更好地学习。我不明白的是,目标变量已经是0和1,所以我不明白为什么它没有使用损失函数category_crossentropy。