python - Kaggle Titanic-Machine Learning From Disaster with TensorFlow:模型训练无法获得损失值
问题描述
我刚刚开始使用 TensorFlow 学习机器学习,我认为通过进入Kaggle上的Titanic-Machine Learning from Disaster来测试我欠发达的技能是一个很好的方法。本次比赛的数据可以在这里找到。
为简单起见,我删除了除 之外的所有字符串值,我将Sex
其映射为1
formale
和0
for female
。
但是在模型训练过程中,所有 epoch 的损失值都是nan
. 我不知道为什么会这样,如果有人能告诉我问题出在哪里,那就太好了。
我当前的代码:
import numpy as np
import pandas as pd
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
train_data['Sex'] = train_data['Sex'].map({'male':1,'female':0})
train_data = train_data.drop('PassengerId', axis=1)
train_data = train_data.drop('Name', axis=1)
train_data = train_data.drop('Ticket', axis=1)
train_data = train_data.drop('Cabin', axis=1)
train_data = train_data.drop('Embarked', axis=1)
train_data = train_data.drop('Fare', axis=1)
test_data = test_data.drop('PassengerId', axis=1)
test_data = test_data.drop('Name', axis=1)
test_data = test_data.drop('Ticket', axis=1)
test_data = test_data.drop('Cabin', axis=1)
test_data = test_data.drop('Embarked', axis=1)
test_data = test_data.drop('Fare', axis=1)
X = train_data.drop('Survived',axis=1).values
y = train_data['Survived'].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.2)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.constraints import max_norm
model = Sequential()
model.add(Dense(6, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(x=X_train,
y=y_train,
epochs=25,
batch_size=256,
validation_data=(X_test, y_test),
)
输出:
Epoch 1/25
3/3 [==============================] - 1s 102ms/step - loss: nan - val_loss: nan
Epoch 2/25
3/3 [==============================] - 0s 15ms/step - loss: nan - val_loss: nan
Epoch 3/25
3/3 [==============================] - 0s 14ms/step - loss: nan - val_loss: nan
Epoch 4/25
3/3 [==============================] - 0s 19ms/step - loss: nan - val_loss: nan
Epoch 5/25
3/3 [==============================] - 0s 22ms/step - loss: nan - val_loss: nan
Epoch 6/25
3/3 [==============================] - 0s 22ms/step - loss: nan - val_loss: nan
Epoch 7/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 8/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 9/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 10/25
3/3 [==============================] - 0s 20ms/step - loss: nan - val_loss: nan
Epoch 11/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 12/25
3/3 [==============================] - 0s 19ms/step - loss: nan - val_loss: nan
Epoch 13/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 14/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 15/25
3/3 [==============================] - 0s 18ms/step - loss: nan - val_loss: nan
Epoch 16/25
3/3 [==============================] - 0s 17ms/step - loss: nan - val_loss: nan
Epoch 17/25
3/3 [==============================] - 0s 15ms/step - loss: nan - val_loss: nan
Epoch 18/25
3/3 [==============================] - 0s 18ms/step - loss: nan - val_loss: nan
Epoch 19/25
3/3 [==============================] - 0s 19ms/step - loss: nan - val_loss: nan
Epoch 20/25
3/3 [==============================] - 0s 16ms/step - loss: nan - val_loss: nan
Epoch 21/25
3/3 [==============================] - 0s 19ms/step - loss: nan - val_loss: nan
Epoch 22/25
3/3 [==============================] - 0s 20ms/step - loss: nan - val_loss: nan
Epoch 23/25
3/3 [==============================] - 0s 18ms/step - loss: nan - val_loss: nan
Epoch 24/25
3/3 [==============================] - 0s 13ms/step - loss: nan - val_loss: nan
Epoch 25/25
3/3 [==============================] - 0s 18ms/step - loss: nan - val_loss: nan
<tensorflow.python.keras.callbacks.History at 0x18bc9160dc0>
解决方案
因为在这个数据集中,该Age
列有一些空值。这就是为什么你得到的损失为nan
.
您可以删除Age
列或清理数据,使其不包含空值。
推荐阅读
- google-cloud-platform - 需要 compute.instances 权限的 Terraforming Cloudfunctions
- quarkus - Quarkus - 如何提供 java 参数以从 maven runner 运行应用程序?
- php - 作曲家警告:作曲家的这个开发版本已经超过 60 天了。建议通过运行更新它
- ios - 运行 UI 测试时 Fastlane 扫描“无法合成事件”,适用于 Xcode
- laravel - Laravel API 资源 whenLoaded 无法与其他值一起正常工作
- java - Spring boot 中的字段是否有“必须为数字”的验证符号?
- c# - Unity:将 Desktop Input.GetButtonDown("Jump") 更改为 Mobile Button Press
- google-cloud-build - 错误:(gcloud.builds.submit)HTTPError 403:使用构建配置文件的权限不足
- windows - 在 WIN32 系统中,如何在不使用 LARGE_INTEGER 数据的情况下将重叠结构中的文件指针递增 n 字节?
- api-key - Carrot2 - 输入私人 PubMed api 密钥