我对Tensorflow相当陌生,我做了一个简单的程序来确定猫和狗之间的区别。当我运行它时,我的准确度总是在50%左右,损失减少。这与验证损失验证的准确性是一样的。验证损失不断减小,但验证精度始终为.45。这是我的密码:
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)只是表现得很奇怪。这些是获得损失和准确度的结果
发布于 2022-01-23 07:46:28
您的模型中有以下代码
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。
layers.Rescaling(1.0/255.0, offset=-1)我认为您需要将输入层作为第一层。我会删除两个增强层,直到你得到你的模型工作,然后你可以在以后加入他们,如果你的模型是过分合适的。我还会在dense32层之后添加另一个退出层。
https://stackoverflow.com/questions/70816774
复制相似问题