我正在学习神经网络,并试图从零开始建立自己的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上。
发布于 2020-06-21 21:12:05
您的模型中有多个不一致之处。
model.add(Dense(120,activation="softmax")) --这一行暗示你有120个类,120个类是很多的,120个类的预期随机精度= 0.83 % --每个类需要大量的样本。你很可能需要一个更好的模特。此外,您需要显示每个时代的损失和指标,以获得更好的想法。
softmax进行多类分类,则首选的损失函数是categorical_crossentropy。发布于 2020-06-22 07:47:50
https://stackoverflow.com/questions/62504265
复制相似问题