【发布时间】:2020-06-21 20:48:34
【问题描述】:
我正在学习神经网络并尝试从头开始构建我自己的 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 上运行。
【问题讨论】:
-
添加可重现的代码示例。
标签: python tensorflow deep-learning neural-network conv-neural-network