首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证损失和训练损失减少,而准确性保持不变。

问验证损失和训练损失减少,而准确性保持不变。
EN

Stack Overflow用户
提问于 2022-01-22 20:16:00
回答 1查看 31关注 0票数 0

我对Tensorflow相当陌生,我做了一个简单的程序来确定猫和狗之间的区别。当我运行它时,我的准确度总是在50%左右,损失减少。这与验证损失验证的准确性是一样的。验证损失不断减小,但验证精度始终为.45。这是我的密码:

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import time
#dataset from folders
img_width = 300
img_height = 300
batch_size = 2
model = keras.Sequential([
    layers.RandomFlip("horizontal_and_vertical"),
    layers.RandomRotation(0.2),
    layers.Input((300,300,1)),
    layers.Conv2D(64,3,padding="same", activation="relu"),#layers, dimentions of layers
    layers.AveragePooling2D(),
    layers.Conv2D(16,3,padding="same", activation="relu"),
    layers.Dropout(.3),
    layers.MaxPool2D(),
    layers.Flatten(),
    layers.Dense(128),
    layers.Dense(64),
    layers.Dense(32),
    layers.Dense(2, input_dim=5,
    kernel_initializer='ones',
    kernel_regularizer=tf.keras.regularizers.L1(0.01),
    activity_regularizer=tf.keras.regularizers.L2(0.01))
])
ds_train = tf.keras.preprocessing.image_dataset_from_directory(
    r"/content/drive/MyDrive/PetPictures",
    labels="inferred",
    label_mode = "int",
    color_mode = "grayscale",
    batch_size = batch_size,
    image_size=(img_height, img_width),
    validation_split = 0.1,
    subset = "training",
    seed = 12
)
ds_validation = tf.keras.preprocessing.image_dataset_from_directory(
    r"/content/drive/MyDrive/PetPictures",
    labels='inferred',
    label_mode = "int", #catagorical, binary
    color_mode = 'grayscale',
    batch_size = batch_size,
    image_size=(img_height, img_width),
    validation_split = 0.1,
    subset = "validation",
    seed = 12
    )
model.compile(
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    optimizer=tf.keras.optimizers.Adam(learning_rate=.0001),
    metrics=['accuracy']
)
model.fit(ds_train,batch_size=100, epochs = 10,validation_data = ds_validation, verbose=1)

只是表现得很奇怪。这些是获得损失和准确度的结果

EN

回答 1

Stack Overflow用户

发布于 2022-01-23 07:46:28

您的模型中有以下代码

代码语言:javascript
复制
layers.Dense(2, input_dim=5,
    kernel_initializer='ones',
    kernel_regularizer=tf.keras.regularizers.L1(0.01),
    activity_regularizer=tf.keras.regularizers.L2(0.01))

input_dim=5不属于密集层规范,您还应该包括一个重新标度层,以将像素置于0到1或更高的范围内,但范围从-1到+1。

代码语言:javascript
复制
layers.Rescaling(1.0/255.0, offset=-1)

我认为您需要将输入层作为第一层。我会删除两个增强层,直到你得到你的模型工作,然后你可以在以后加入他们,如果你的模型是过分合适的。我还会在dense32层之后添加另一个退出层。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70816774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档