python - CNN 的准确率非常低
问题描述
我正在学习神经网络并尝试从头开始构建自己的 CNN 模型。目前我正在研究包含 20000 张图片的斯坦福狗数据集。我已经建立了一个模型并且成本已经很低。但是准确率很低,虽然我不明白原因。
在这里我做数据增强:
import os
import time
import zipfile
import pandas as pd
import tensorflow as tf
from tensorflow import keras # Tensorflow high-level api
from tensorflow.keras import layers
from keras import optimizers
from keras.models import Model, Sequential
from keras.layers import Dense,Flatten, GlobalAveragePooling2D, BatchNormalization, Activation, Dropout, Conv2D,MaxPooling2D
from keras.callbacks import ModelCheckpoint, EarlyStopping, TensorBoard, CSVLogger, ReduceLROnPlateau
#from keras.layers import Activation, Dropout, Flatten, Dense
from keras.applications.xception import Xception
from keras.preprocessing.image import ImageDataGenerator
!pip install kaggle
from google.colab import files
files.upload()
#before importing the dataset we want to use this code
# The Kaggle API client expects this file to be in ~/.kaggle,
!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
# This permissions change avoids a warning on Kaggle tool startup.
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d jessicali9530/stanford-dogs-dataset
local_zip = '/content/stanford-dogs-dataset.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/content/stanford-dogs')
zip_ref.close()
train_data_dir = os.path.join("/content", "stanford-dogs", "images", "Images")
img_width, img_height = 128, 128
batch_size = 32
train_datagen = ImageDataGenerator(
rescale=1./255,
vertical_flip = True,
horizontal_flip = True,
rotation_range=20,
shear_range=0.05,
zoom_range=0.2,
width_shift_range=0.1,
height_shift_range=0.1,
validation_split=0.15
channel_shift_range=0.1
)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical', # 2D one-hot encoded labels (batch_size x 101)
subset='training')
validation_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical', # 2D one-hot encoded labels (batch_size x 101)
subset='validation')
model.add(Conv2D(kernel_size=(3,3),filters=32,input_shape = (img_width, img_height, 3),activation="relu",padding="valid"))
model.add(Conv2D(kernel_size=(3,3),filters=32,activation="relu",padding="same"))
model.add(Dropout(0.15))
model.add(Conv2D(kernel_size=(3,3),filters=24))
model.add(Conv2D(kernel_size=(3,3),filters=64,activation="relu",padding="same"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(kernel_size=(3,3),filters=24))
model.add(Dropout(0.25))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(kernel_size=(5,5),filters=32,activation="relu",padding="same"))
model.add(MaxPooling2D(pool_size=(3,3)))
model.add(Flatten())
model.add(Dense(100,activation="relu",kernel_regularizer=keras.regularizers.l2(0.01)))
model.add(Dropout(0.4))
model.add(Dense(120,activation="softmax"))
model.summary()
model.compile(loss=keras.losses.binary_crossentropy,
optimizer=keras.optimizers.Adadelta(lr=0.01),
metrics=['accuracy'])
history = model.fit_generator(train_generator,
steps_per_epoch = train_generator.n // train_generator.batch_size,
validation_data = validation_generator,
validation_steps = validation_generator.n // validation_generator.batch_size,
epochs = 10,
shuffle= True,
verbose = 1)
成本处于预期水平,从 1.9 开始,然后按我的意愿下降。但我不确定如何处理准确性。
编辑:我编辑了代码,我目前在 Google Colab 上运行它。
解决方案
推荐阅读
- git - 在 VS Code 中打开的终端上运行 shell 命令
- r - 当在 R 中的大型数据集中达到某个梯度时,有没有办法识别特定点?
- python - 抓取后丢失数据
- windows - 获取 Windows 程序的内存地址范围
- node.js - AJAX 调用中断,NodeJS,Express,Handlebars
- html - Changing the function of a button based on if a user is logged in
- mysql - mysql - 根据表中列值最高的 id 连接表行 - 多个连接和条件
- python - 我正在尝试制作一个等待用户消息的不和谐机器人,如果提到三个标签,它会给出滴答反应
- flutter - Flutter 中的 Overlay 冻结了应用程序
- php - laravel api 门检查