【问题标题】:Loss function volatility with TF/Keras使用 TF/Keras 的损失函数波动率
【发布时间】:2020-04-11 15:27:39
【问题描述】:

我正在运行一个相当简单的 Keras 分类,它基于 30 个特征。我还没有理解的是,如果我增加进入模型的行数,为什么损失函数会变得更加不稳定:

df = pd.read_csv("cancer_classification.csv")
df = df.iloc[:50]

# split data
X = df.drop("benign_0__mal_1", axis=1).values
y = df["benign_0__mal_1"].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.50, random_state=101)

# scale
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit_transform(X_train)
scaler.transform(X_test)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

print(X_train.shape)
# ---> (50, 30)

model = Sequential()
model.add(Dense(30, activation="relu"))
model.add(Dense(15, activation="relu"))
model.add(Dense(5, activation="relu"))

# binary classification - so last layer has sigmoid activation function
model.add(Dense(1, activation="sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="adam")

# we will overfit to show how it looks like - so 1000 epochs
model.fit(X_train, y_train, epochs=1000, validation_data=(X_test, y_test))

# plotting it out - we leave out first 10 rows so we dont skew chart too much with high loss number on the beginning
loss_df = pd.DataFrame(model.history.history)

loss_df = loss_df.iloc[10:]
loss_df.plot()
plt.show()

最初的想法是在损失持续下降而 val_loss 开始上升时可视化过度拟合。我想知道为什么放 500 行会在损失函数中产生如此剧烈的波动。

50 df rows

500 df rows

【问题讨论】:

    标签: tensorflow keras loss


    【解决方案1】:

    尝试打乱您的数据。并检查前 50 行和 500 行的数字类分布,我认为这可能是不洗牌的结果。这也可能是由您正在进入模型的功能引起的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2018-10-21
      相关资源
      最近更新 更多