微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CNN 从图像回归:输出位于均值附近的小范围内

如何解决CNN 从图像回归:输出位于均值附近的小范围内

我对 CNN、ML 等很陌生,但遇到了一个问题。

我有一个回归问题。问题如下。

我有很多(5000)个厄密矩阵,它们被转换为灰度图像(每个像素值基本上是矩阵元素,缩放到 0-255)。每张图像的大小为 70X70。然而,在主要问题中,所有单个图像像素值都归一化为 0-1。

现在,众所周知,将这些矩阵 (X) 对角化并进一步做一些数学运算可以得出特定矩阵所独有的数字 (y)。 y 的范围通常在 0.2-0.6 之间。

我正在尝试使用 CNN 解决回归问题,然后在 Tensorflow 上使用几个深层,其中输入为 X,目标输出为 y。 (可能相当于人脸图像的年龄判断问题)

问题在于模型总是预测接近平均值的 y 值,即 0.4+-小波动。仔细观察会发现波动确实有点跟随我的目标 y 值的趋势,但预测值仅在大约 0.35-0.45 的范围内。

我在 5 折交叉验证的每一折都得到 MSE~7×10^-4。

我应该寻找哪些问题?我完全是这个领域的初学者。任何帮助或想法将不胜感激。 TIA。

fold_no = 1
for train,test in kfold.split(inputs,targets):

  
  model = Sequential()
  model.add(Conv2D(10,kernel_size=(3,3),activation='relu',input_shape=input_shape))
  model.add(MaxPooling2D(pool_size=(2,2)))
  model.add(Conv2D(20,activation='relu'))
  model.add(MaxPooling2D(pool_size=(2,2)))
  model.add(Flatten())
  model.add(Dense(20,activation='relu'))
  model.add(Dense(10,activation='relu'))
  model.add(Dense(1))

  
  optimizer=tf.keras.optimizers.Adam(learning_rate=0.01,beta_1=0.9,beta_2=0.999,epsilon=1e-01,decay=0.0)
  model.compile(optimizer=optimizer,loss='mean_squared_error')


  
  print('------------------------------------------------------------------------')
  print(f'Training for fold {fold_no} ...')

  
  history = model.fit(inputs[train],targets[train],batch_size=batch_size,epochs=no_epochs,verbose=verbosity)
  
  
  scores = model.evaluate(inputs[test],targets[test],verbose=0)
  print(f'score for fold {fold_no}: {model.metrics_names} of {scores}')
  
  loss_per_fold.append(scores)

  fold_no = fold_no + 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。