tensorflow 使用迁移学习时,模型未进行学习

sczxawaw  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(136)

我是机器学习的初学者,我正在尝试开发一个可以从人脸数据集预测年龄的模型。然而,我的模型没有学习,我正在努力找出原因。我正在导入VGG16架构,但它仍然没有学习。我已经通过论坛搜索,甚至尝试训练模型只有2个例子,它仍然无法过拟合。在整个训练过程中,训练准确性几乎没有增加,验证准确性也没有增加。

path = "../input/agedetection/dataset/dataset"
files = os.listdir(path)
X = []
age_temp = []

for file in files:
    img = cv2.imread(path+'/'+file)
    img = cv2.resize(img, dsize = target_size)
    X.append(img)
    fields = file.split('_')
    age_temp.append(fields[0])

X = np.array(X).astype('float32')
X = X/255

#converting age into different brackets  - 0-20, 21-40, 41-60,61+
age = np.zeros(len(age_temp))

for i in range(len(age_temp)):
    curr_age = int(age_temp[i])
    if curr_age <= 20:
        val = 0
    elif curr_age <= 40:
        val = 1
    elif curr_age <= 60:
        val = 2
    else:
        val = 3
    age[i] = val

age = to_categorical(age, num_classes = 4)
age = age.astype('float32')

base_model_age = tf.keras.applications.VGG16(input_shape=input_shape,include_top=False,weights="imagenet")
for layer in base_model_age.layers[:-20]:
    layer.trainable=False
model_age = Sequential()
model_age.add(base_model_age)
model_age.add(Flatten())
model_age.add(Dense(1024, activation='relu'))
model_age.add(Dense(4, activation = 'relu'))

model_age.compile(optimizer=Adam(adam),
              loss='mse'
              ,metrics=['accuracy'])

hist_age = model_age.fit(X_train, age_train,
                         validation_data=(X_validation, age_validation),
                         epochs=10, steps_per_epoch=256, 
                         callbacks=[lrd, mcp])

字符串

wrrgggsh

wrrgggsh1#

你把这个问题设计成一个分类问题。但是,您的模型被构造为回归模型。如果你做了下面的改变,你可能会得到更好的预测。
model_age.add(base_model_age)应该是model_age.add(base_model_age.output)
第二,改变

model_age.add(Dense(4, activation = 'relu'))

字符串
收件人:

model_age.add(Dense(4, activation = 'softmax'))


第三,改变

model_age.compile(optimizer=Adam(adam),
              loss='mse',
              metrics=['accuracy'])


收件人:

model_age.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


最后,你似乎训练了最后20层。你可能不需要训练这么多层,只需要最高密度的层就足够了。

相关问题