我正在使用 Keras 实现神经网络,但Sequential
模型返回nan
损失值。我在输出层有 sigmoid 激活函数,可以将输出压缩在 0 和 1 之间,但可能无法正常工作。
这是代码:
def data_generator(batch_count, training_dataset, training_dataset_labels):
while True:
start_range = 0
for batch in batch_count:
end_range = (start_range + batch[1])
batch_dataset = training_dataset[start_range:end_range]
batch_labels = training_dataset_labels[start_range:end_range]
start_range = end_range
yield batch_dataset, batch_dataset
mlp = keras.models.Sequential()
# add input layer
mlp.add(
keras.layers.Input(
shape = (training_dataset.shape[1], )
)
)
# add hidden layer
mlp.add(
keras.layers.Dense(
units=training_dataset.shape[1] + 10,
input_shape = (training_dataset.shape[1] + 10,),
kernel_initializer='random_uniform',
bias_initializer='zeros',
activation='relu')
)
# add output layer
mlp.add(
keras.layers.Dense(
units=1,
input_shape = (1, ),
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
activation='sigmoid')
)
print('Compiling model...\n')
mlp.compile(
optimizer='adam',
loss=listnet_loss
)
mlp.summary() # print model settings
# Training
with tf.device('/GPU:0'):
print('Start training')
#mlp.fit(training_dataset, training_dataset_labels, epochs=50, verbose=2, batch_size=3, workers=10)
mlp.fit_generator(data_generator(groups_id_count, training_dataset, training_dataset_labels),
steps_per_epoch=len(training_dataset), epochs=50, verbose=2, workers=10, use_multiprocessing=True)
我能怎么做?