首页 > 解决方案 > TensorFlow 神经网络不学习

问题描述

我为一个大学项目建立了一个神经网络。目标是找出传感器数据(温度、湿度和光线)是否可以预测日出是否发生在给定的时间范围内。所以,它是一个二元分类。问题是网络不学习。精度收敛到大约 0.8,并且在大约 5 个 epoch 后没有变化。与损失相同,在几个时期后约为 0.4921。我尝试了几件事,例如更改激活函数或隐藏层的数量,但没有任何效果。

我还创建了一个具有等量“sunrise = 1”和“sunrise = 0”数据点的数据集。准确度最终恰好为 0,5。因此,我认为网络设置本身有问题。

你知道有什么问题吗?

这是我的代码:

def build_network():
input = keras.Input(shape=(4,25), name="input")
hidden = layers.Dense(1000, activation="sigmoid", name="dense1")(input)
hidden = layers.Dense(1000, activation="sigmoid", name="dense2")(hidden)
hidden = layers.Flatten()(hidden)
hidden = layers.Dense(500, activation="sigmoid", name="dense3")(hidden)
hidden = layers.Dense(500, activation="sigmoid", name="dense4")(hidden)
hidden = layers.Dense(10, activation="sigmoid", name="dense5")(hidden)
output = layers.Dense(1, activation="sigmoid", name="output")(hidden)
model = keras.Model(inputs=input, outputs=output, name="sunrise_model")
return model

 def train_model():
training_files = r'data/training'
test_files = r'data/test'

print('reding files...')
train_x, train_y = load_data(training_files)
test_x, test_y = load_data(test_files)

print("training network")

# compile model
model = build_network()
model.compile(
    loss=keras.losses.BinaryCrossentropy(from_logits=False),
    optimizer=keras.optimizers.RMSprop(),
    metrics=["accuracy"],
)

# Train / fit
model.fit(train_x, train_y, batch_size=100, epochs=200)

# evaluate
test_scores = model.evaluate(test_x, test_y, verbose=2)
print("Test loss:", test_scores[0])
print("Test accuracy:", test_scores[1])

这是输出:损失:0.4921 - 准确度:0.8225

测试损耗:0.4921109309196472,测试精度:0.8225

以下是数据示例:https ://hastebin.com/hazipagija.json

标签: pythontensorflowmachine-learningkerasneural-network

解决方案


我会使用 RELU 而不是 sigmoid 作为激活函数。你使用的学习率是多少?尝试较小的学习率。实际上,我发现使用可变学习率可以获得最佳结果。Keras 回调 ReduceLROnPlateau 使这很容易做到。文档在这里。我还建议您使用 Keras 回调 ModelCheckpoint 来保存具有最低验证损失的模型,然后使用该模型对测试集进行预测。文档在这里。我也认为你的模型有很多参数并且会过拟合。向模型添加 dropout 层以帮助减少此问题。我会尝试降低模型复杂性作为一个很好的选择。取出具有 1000 个节点的层和具有 500 个节点的层之一,看看你得到了什么结果。我也更喜欢使用 Adamax 优化器。文档在这里。. 使用默认值。


推荐阅读