【问题标题】:Tensorflow model training constant loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 0.0000e+00 - val_accuracy: 1.0000TensorFlow 模型训练常数损失:0.0000e+00 - 准确度:1.0000 - val_loss:0.0000e+00 - val_accuracy:1.0000
【发布时间】:2021-08-03 14:35:48
【问题描述】:

我一直在尝试训练一个用于车辆图像分类的模型,但在每个训练时期我一直在损失:0.0000e+00 - 准确度:1.0000 - val_loss: 0.0000e+00 - val_accuracy: 1.0000。

import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import pathlib

data_dir = tf.keras.utils.get_file('cars_photos', origin="C:\\Users\\User\\.keras\\datasets\\cars_photos")
data_dir = pathlib.Path(data_dir)

batch_size = 32
img_height = 180
img_width = 180

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

class_names = train_ds.class_names
print(class_names)

AUTOTUNE = tf.data.AUTOTUNE

train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

num_classes = 1

model = Sequential([
  layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
  layers.Conv2D(16, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(32, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(64, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Flatten(),
  layers.Dense(128, activation='relu'),
  layers.Dense(num_classes)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

epochs=10
history = model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs
)

我自己下载了图像,最小尺寸为 180x180,最大尺寸为 1920 x 1024。图像也有JPEG和一些PNG格式。

我关注image classification tutorial 并尝试寻找解决方案,但没有找到。

【问题讨论】:

  • 你确定你有一节课吗?因为最少有两个类。
  • 是的,对,我也想知道。 print(class_names)这一行的输出是什么,@SaltyCode

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

试试这个:

layers.Dense(num_classes, activation = 'sigmoid')

还有这个:

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=['accuracy'])

【讨论】:

  • 现在每个训练 epoch 的结果是 loss: 0.0000e+00 - accuracy: (changes) - val_loss: 0.0000e+00 - val_accuracy: (changes)
  • 我相信有一些改进,现在只有 loss 和 val_loss 保持不变,值为 0.0000e+00,而 accuracy 和 val_accuracy 不断更改为 0.605 和 0.0526
  • 你在分类什么?你有几节课?
  • 我正在对车辆类型进行分类,到目前为止只有一类用于初始测试。更改编译方法后,它似乎正在工作,但在第二个 epoch 之后,输出丢失:6.7703e-18 - 准确度:1.0000 - val_loss:2.6361e-25 - val_accuracy:1.0000。 loss 和 val_loss 变量以及常量 acc 和 val_accuracy 的数字非常低。此外,在尝试预测时,我得到 100% 的预测,其中一张图像对车辆类型正确,而另一张图像不正确。
  • @SaltyCode 你至少需要两节课,一节课没有意义。
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多