我正在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的教程:https://keras.io/#getting-started-30-seconds-to-keras
问题是,我总是得到相同的损失值(6.1316862406430541
)和相同的准确度(0.61538461830232527
),因为预测总是1。
我不确定是不是因为代码错误:
X_train
的形状错了? epochs
和/或batch_size
做错了。或者,如果是因为网络本身:
如果你有任何想法,这是我的代码:
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 :(得分:1)
这是一个非常常见的情况。如果检查数据的直方图,您将看到数据集中有数据点,其坐标范围为0
到100
。当您将此类数据提供给神经网络时,sigmoid
的输入可能会很大,以至于会遭受下溢。为了扩展数据,您可以使用MinMaxScaler
或StandardScaler
,这要归功于您使数据具有适合神经网络计算的范围。