python - 基本 TensorFlow 模型显示随机结果
问题描述
我正在构建一些新模型,并希望回到一些基础。所以我决定编写一个分类器,将 [1, 1] 分类为 1,将所有其他组合分类为 0。
我已经为此写了几个不同的变体,并不断得到不同的结果。
from tensorflow.keras import layers, models
from tensorflow import keras
data = [[1., 1.], [1., 0.], [0., 1.], [0., 0.]]
results = [[1.], [0.], [0.], [0.]]
def build_model():
model = models.Sequential()
model.add(layers.Dense(len(data[0]), activation='relu'))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(1))
model.compile(loss=keras.losses.BinaryCrossentropy(), metrics=[keras.metrics.Accuracy()], optimizer='adam')
return model
model = build_model()
model.fit(data, results, epochs=1000)
model.summary()
print(model.predict([data[0]]))
print(model.predict([data[1]]))
print(model.predict([data[2]]))
print(model.predict([data[3]]))
有时输出完全错误:
[[0.]]
[[0.]]
[[0.]]
[[0.]]
而且模型永远不会准确。
Epoch 1000/1000
1/1 [==============================] - 0s 910us/step - loss: 3.8562 - accuracy: 0.7500
有时它显示出较低的准确性并产生不好的结果:
Epoch 1000/1000
1/1 [==============================] - 0s 918us/step - loss: 3.8562 - accuracy: 0.2500
[[-0.1101699]]
[[-0.13835455]]
[[-0.03829439]]
[[0.]]
其他时候它“有点”有效:
Epoch 1000/1000
1/1 [==============================] - 0s 898us/step - loss: 0.0000e+00 - accuracy: 0.0000e+00
(虽然我希望准确度为 1)
[[1.1292353]]
[[-0.167045]]
[[-0.03134967]]
[[-0.3522459]]
有人可以帮助我了解我的结果的差异。我已经创建了这个模型的多个版本,包括更多层、更少层、各种大小的 Dense() 层。我已经尝试了几个损失和指标,但是,此时我只是随机做事。
解决方案
因为你有一个二元分类问题(即二元交叉熵损失和准确度度量),你不应该为你的最后一层使用linear
激活函数,这是默认的,如果你没有指定任何东西,就像这里; 来自文档:
activation:要使用的激活函数。如果您未指定任何内容,则不会应用任何激活(即“线性”激活:)
a(x) = x
。
对于(二元)分类问题,最后一层的线性激活是没有意义的;因此,将您的最后一个模型层更改为:
model.add(layers.Dense(1, activation='sigmoid'))
并且您应该没问题(另请参阅Train accuracy 随着 train loss和Model not learning降低)。
推荐阅读
- python-3.x - 从 TF 数据集获取样本
- javascript - 即使所有轨道关闭,停止共享按钮也不会消失?
- python - 从数据框中的句子中的两个列表中提取单词
- django - 将图像渲染到 Django 管理中的选择/字符字段
- javascript - Electron“处理程序中发生错误” ipcRenderer.invoke
- python - 私有数据集的正确 GCS 路径是什么?
- android - 我们如何在 Scala 中使用 android JobIntentService?
- c# - Asp .net core SignalR 发送实时数据
- html - Web 开发制作按钮以更改图像和文本
- powerbi - Power BI - 与其他组织的人员共享报表时无法访问数据源