[英]Neural Network Gives a Loss of Nan When Training
I'm training a Keras neural net in Python.我正在 Python 中训练一个 Keras 神经网络。 When the model is training, the loss is NAN.
model 在训练时,损失为 NAN。 I can't figure out why this would be.
我不明白为什么会这样。 There are no NAN values in the input.
输入中没有 NAN 值。 Here is the code.
这是代码。
def train_model(self, epochs, batch_size, verbose=1, layer_sizes=[], activation_function='relu',
loss='mean_squared_error', optimizer='adam'):
layer_sizes = list(layer_sizes)
model = Sequential()
model.add(Dense(self.features.shape[1], input_dim=self.features.shape[1], kernel_initializer='normal',
activation=activation_function))
for i in range(len(layer_sizes)):
model.add(Dense(layer_sizes[i], kernel_initializer='normal', activation=activation_function))
model.add(Dense(self.targets.shape[1], kernel_initializer='normal', activation=activation_function))
model.compile(loss=loss, optimizer=optimizer)
model.fit(self.X_train, self.Y_train, epochs=epochs, verbose=verbose, batch_size=batch_size)
self.model = model
with the following output与以下 output
128/857336 [..............................] - ETA: 58:15 - loss: nan
384/857336 [..............................] - ETA: 21:36 - loss: nan
640/857336 [..............................] - ETA: 14:12 - loss: nan
896/857336 [..............................] - ETA: 11:01 - loss: nan
and it continue on further它继续进一步
Testing for nans is here测试 nans 在这里
print(df.isnull().values.any())
False
Here is the link to a CSV with sample data.这是指向带有示例数据的 CSV 的链接。
https://drive.google.com/file/d/1FJqcEmTQ24WebelyLRkGOuPFlSUJt92c/view?usp=sharing https://drive.google.com/file/d/1FJqcEmTQ24WebelyLRkGOuPFlSUJt92c/view?usp=sharing
and here is the constructor code这是构造函数代码
if data_file == '':
self.engine = create_engine(
'postgresql://{}:{}@{}:{}/{}'.format(Model.user, Model.password, Model.host, Model.port,
Model.database))
data = [chunk for chunk in
pd.read_sql('select * from "{}"'.format(Model.table), self.engine, chunksize=200000)]
df = pd.DataFrame(columns=data[0].columns)
for datum in data:
df = pd.concat([df, datum])
df.to_hdf('Cleaned_Data.h5', key='df', mode='w')
else:
df = pd.read_hdf(data_file)
df = df.fillna(0)
df = df.head(1000)
df.to_csv('Minimum_sample.csv')
print(df.isnull().values.any())
columns = list(df.columns)
misc_data, self.targets, self.features = columns[0:5], columns[6:9], columns[5:6]
misc_data.extend(columns[9:10])
misc_data.extend(columns[12:13])
misc_data.extend(columns[15:16])
self.targets.extend(columns[10:12])
self.targets.extend(columns[13:15])
self.targets.extend(columns[16:26])
self.features.extend(columns[73:470])
df = df[misc_data + self.targets + self.features]
self.targets = df[self.targets].values
self.features = df[self.features].values
self.X_train, self.X_test, self.Y_train, self.Y_test = train_test_split(self.features, self.targets,
test_size=test_split_size)
Any help would be appreciated!任何帮助,将不胜感激!
You need to standardize your input in some way.您需要以某种方式标准化您的输入。 Try this:
尝试这个:
from sklearn import preprocessing
scalerx = preprocessing.StandardScaler().fit(self.X_train)
self.X_train = scalerx.transform(self.X_train)
self.X_test = scalerx.transform(self.X_test)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.