Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Neural network 二进制分类总是输出1_Neural Network_Keras - Fatal编程技术网

Neural network 二进制分类总是输出1

Neural network 二进制分类总是输出1,neural-network,keras,Neural Network,Keras,我正在进行keras的第一步,我正在尝试对scikit-learn中提供的癌症数据集进行二进制分类 # load dataset from sklearn import datasets cancer = datasets.load_breast_cancer() cancer.data # dataset into pd.dataframe import pandas as pd donnee = pd.concat([pd.DataFrame(data = cancer.data, col

我正在进行
keras
的第一步,我正在尝试对
scikit-learn
中提供的癌症数据集进行二进制分类

# load dataset
from sklearn import datasets
cancer = datasets.load_breast_cancer()
cancer.data

# dataset into pd.dataframe
import pandas as pd
donnee = pd.concat([pd.DataFrame(data = cancer.data, columns = cancer.feature_names), 
                   pd.DataFrame(data = cancer.target, columns = ["target"])
                      ], axis = 1)

# train/test split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(donnee.loc[:, donnee.columns != "target"], donnee.target, test_size = 0.25, random_state = 1)
我在这里尝试遵循keras的教程:

问题是,我总是得到相同的损失值(
6.1316862406430541
),和相同的精度(
0.6153841830232527
),因为预测总是1

我不确定是否是因为代码错误:

  • 我不知道,也许X_火车的形状不对
  • 或者我在
    epochs
    和/或
    batch\u size
    方面做错了什么
或者如果是因为网络本身:

  • 如果我没有弄错的话,如果层没有偏差,所有1预测都是可能的,我还不知道它们是如何初始化的
  • 但也许是别的原因,也许只有一层就太少了?(如果是这样,我想知道为什么keras的教程只有一层…)
这是我的代码,如果你有任何想法:

import keras
from keras.models import Sequential

model = Sequential()

from keras.layers import Dense

model.add(Dense(units=64, activation='relu', input_dim=30))
model.add(Dense(units=1, activation='sigmoid'))
model.summary()

model.compile(loss = keras.losses.binary_crossentropy,
              optimizer = 'rmsprop',
              metrics=['accuracy']
              )

model.fit(X_train.as_matrix(), y_train.as_matrix().reshape(426, -1), epochs=5, batch_size=32)

loss_and_metrics = model.evaluate(X_test.as_matrix(), y_test.as_matrix(), batch_size=128)
loss_and_metrics

classes = model.predict(X_test.as_matrix(), batch_size=128)
classes 

这是一个非常常见的情况。如果检查数据的柱状图,您将看到数据集中存在坐标范围从
0
100
的数据点。当您将这些数据输入到神经网络时,输入到
sigmoid
的数据可能太大,以致于它会受到下溢的影响。为了缩放数据,您可以使用或感谢您将使数据具有适合神经网络计算的范围。

您可以添加一个小数据样本、几个x_列和y列吗?您可以通过运行问题顶部的代码来获取数据。完整的数据集是569行x 31列,它不会融化你的计算机;)谢谢事实上,由于这个答案,我理解了这个问题:。这个问题也可以通过不在一个sigmoid之前链接relu来解决,例如多个sigmoid。实际上,这可能会在第一个
sigmoid
层中导致类似的问题。这是由于
sigmoid
饱和引起的。