我试图使一个TensorFlow
回归模型。我还尝试在GPU上运行此操作,将激活更改为relu
,tanh
,sigmoid
,更改优化器SGD,但它仍然返回nan
。这个代码有问题吗?
import tensorflow as tf
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
Dataset=pd.read_csv('train.csv')
Dataset_droped = Dataset.drop(["PassengerId", "Name", "Ticket"], axis=1)
Dataset_one_hot = pd.get_dummies(Dataset_droped)
X = Dataset_one_hot.drop(["Survived"], axis=1)
y = Dataset_one_hot["Survived"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
tf.random.set_seed(42)
model_10 = tf.keras.Sequential([
tf.keras.layers.Dense(10),
tf.keras.layers.Dense(10),
tf.keras.layers.Dense(1)
])
model_10.compile(loss=tf.keras.losses.BinaryCrossentropy(),
optimizer=tf.keras.optimizers.Adam(),
metrics=['accuracy'])
history_10 = model_10.fit(X_train, y_train, epochs=10)
model_10.predict(X_test)
看起来像你的模型在返回nan值时爆炸了梯度。
- 同样,请检查是否从稠密层返回到下一层的序列。
- 尝试在中间添加退出层,看看训练效果如何
- 更改并指定激活层为sigmoid,因为您的目标是二进制的,它看起来像没有定义激活函数。
查找Dense的链接:https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense