python cnn代码详解 keras_python – CNN与keras,准确性没有提高

我最近开始使用机器学习,我正在学习CNN,我计划在

Keras blog和

github repo的帮助下编写一个Car Damage严重性检测应用程序.

这是汽车数据集的样子:

F:\WORKSPACE\ML\CAR_DAMAGE_DETECTOR\DATASET\DATA3A

├───training (979 Images for all 3 categories of training set)

│ ├───01-minor

│ ├───02-moderate

│ └───03-severe

└───validation (171 Images for all 3 categories of validation set)

├───01-minor

├───02-moderate

└───03-severe

以下代码只给我32%的准确性.

from keras.preprocessing.image import ImageDataGenerator

from keras.models import Sequential

from keras.layers import Conv2D, MaxPooling2D

from keras.layers import Activation, Dropout, Flatten, Dense

from keras import backend as K

# dimensions of our images.

img_width, img_height = 150, 150

train_data_dir = 'dataset/data3a/training'

validation_data_dir = 'dataset/data3a/validation'

nb_train_samples = 979

nb_validation_samples = 171

epochs = 10

batch_size = 16

if K.image_data_format() == 'channels_first':

input_shape = (3, img_width, img_height)

else:

input_shape = (img_width, img_height, 3)

model = Sequential()

model.add(Conv2D(32, (3, 3), input_shape=input_shape))

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())

model.add(Dense(64))

model.add(Activation('relu'))

model.add(Dropout(0.5))

model.add(Dense(1))

model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',

optimizer='rmsprop',

metrics=['accuracy'])

# this is the augmentation configuration we will use for training

train_datagen = ImageDataGenerator(

rescale=1. / 255,

shear_range=0.2,

zoom_range=0.2,

horizontal_flip=True)

# this is the augmentation configuration we will use for testing:

# only rescaling

test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(

train_data_dir,

target_size=(img_width, img_height),

batch_size=batch_size,

class_mode='binary')

validation_generator = test_datagen.flow_from_directory(

validation_data_dir,

target_size=(img_width, img_height),

batch_size=batch_size,

class_mode='binary')

model.fit_generator(

train_generator,

steps_per_epoch=nb_train_samples // batch_size,

epochs=epochs,

validation_data=validation_generator,

validation_steps=nb_validation_samples // batch_size)

model.save_weights('first_try.h5')

我试过了:

>通过将时期增加到10,20,50.

>通过增加数据集中的图像(添加到训练集中的所有验证图像).

>通过更新Conv2D层中的过滤器大小

>尝试添加几个Conv2D图层,MaxPooling图层

>还尝试使用不同的优化器,如adam,Sgd等

>还尝试将过滤器步幅更新为(1,1)和(5,5)而不是(3,3)

>还尝试将更改的图像尺寸从(150,150)更新为(256,256),(64,64)

但是没有运气,每次我的准确度达到32%或更低,但不会更高.

知道我错过了什么.

正如在github repo中我们所看到的,它为同一数据集提供了72%的准确度(Training -979,Validation -171).为什么它不适合我.

我在我的机器上的github链接上尝试了他的代码但是在训练数据集时它被挂起(我等了8个多小时),所以改变了方法,但到目前为止仍然没有运气.

这是包含我的训练时期输出的Pastebin.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值