使用张量流 keras 进行预测

数据挖掘 Python 喀拉斯 张量流
2022-02-18 03:43:00

我试图从给定的图片中预测年龄。我在下面构建了模型,但问题是我在拟合模型时得到了非常大的loss值。accuracy

我认为问题在于选择了错误的损失函数(这里mean_squared_error)。这里有什么问题?

import tensorflow as tf
from tensorflow import keras

X = X.reshape(-1, image_size[0], image_size[1], 1)
model = keras.models.Sequential()

model.add(keras.layers.Conv2D(32, (5, 5), activation='relu', input_shape=X.shape[1:]))
model.add(keras.layers.MaxPooling2D((2, 2)))

model.add(keras.layers.Conv2D(32, (3, 3), activation='relu'))
model.add(keras.layers.MaxPooling2D(2, 2))

model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(60, activation='relu'))
model.add(keras.layers.Dropout(0.4))
model.add(keras.layers.Dense(1, activation='softmax'))
model.compile(optimizer='adam', loss=keras.losses.mean_squared_error, metrics=['accuracy'])


model.fit(X, Y, epochs=170, shuffle=True, validation_split=0.1)

作为另一个问题,我的图层对于预测给定图片的数字是否正确?

2个回答

这就是问题:model.add(keras.layers.Dense(1, activation='softmax'))

对于预测年龄等实值数据,习惯上将激活设置为linear或 在这种情况下,您可能可以使用relu.

为了说明,softmax将在输出上创建一个分布,在这种情况下,模型的输出将始终为1由于年龄是正定连续数,因此您需要一个激活满足的实数范围 >= 0 的relu激活。

作为另一个问题,我的图层是否可以很好地预测给定图片的数字?

该架构似乎是合理的,因此请先尝试更改模型的最终激活。

我不知何故觉得这个问题本质上比技术更实用。应该尝试将年龄转换为年龄范围的箱,然后将其用作多类分类问题陈述。从图片中预测年龄甚至是人类都无法做到的事情,因此 NN 也会“学习”固有的误解,并且 MAE 总是很高