因为数据城堡的猫狗比赛还能提交,当时kuhung夺冠时是0.98638分,现在已经有人满分了,这帮人很皮,有提交一次就满分的,显然是********哈哈。现在程序cpu上正在训练,这篇文章介绍下深度学习基本框架中容易报错的结构。
在cpu上正在训练,很慢,大概算了下要800分钟,目前训练到了第三个epoch,acc在0.8左右,loss0.4,模型应该是效果还不错,至少到现在还不错吧。
使用的vgg16,结构展示下。
flatten dense activation dropout pre层自己加,而且几乎是必加。
首先,数据集参数设置的时候数目一定要看对,输对哦。
train_data_dir = 'pad_data/train'
validation_data_dir = 'pad_data/validation'
nb_train_samples = 9425
nb_validation_samples = 3816
epochs = 40
batch_size = 32
callbacks=[]这里用的是三个,见仁见智。
callbacks = [
#EarlyStopping(monitor='val_loss', patience= 3, verbose=0),
keras.callbacks.ModelCheckpoint('cervical_best.hdf5', monitor='val_loss', save_best_only=True, verbose=0),
# LearningRateScheduler(step_decay)
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=1, verbose=1, mode='auto', epsilon=0.0001, cooldown=1, min_lr=0),
# keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=0, write_graph=True, write_images=False, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None)
keras.callbacks.TensorBoard(log_dir='./logs'),
# batch_parms
# plot_loss_callback
]
`训练用的fit_generator(),callback这里报错可能不太好改,如果实在改不了就更新下mplt,pillow等库的版本到最新
history = model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=40,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size,
verbose=1,
#callbacks=None)
callbacks=callbacks)
#callbacks=[batch_parms])
with open('history.txt','w') as f:
f.write(str(history.history))
model.save_weights('training.h5')
model.save("vgg16_classification.h5")
预测部分使用cv预处理,针对最新版本的vgg和jupyter要加axis=0
#files = glob.glob("validation/P_NG/*")
files = glob.glob("pad_data/test/*jpg")
image_list = []
for f in files:
print (f)
image = cv2.imread(f)
if np.all(image ==None):
pass
else:
image = cv2.resize(image,(128,128))
image = image/ 255.
image = np.expand_dims(image,axis=0)
# image_list.append(image)
pre=model.predict(image, verbose=1, batch_size=32)
#pre.append(f)
print(pre)
if pre[0][0]<pre[0][1]:
image_list.append(f)
# image_list = np.array(image_list)
# predictions = model.predict(image_list, verbose=1, batch_size=32)
print(image_list)
以下是pre输出部分,用np稍微操作一下就可以了。
这个速度每张100ms左右还是不算快的,而且在识别领域没有加上ROI过程,如果加上之后还能有这个速度,那将是极好的。
中间算法和各个函数部分就不展示了,还是比较复杂的而且因人而异,参考yinjh也可以,但是想要做到满分还是要自己去尝试。
希望小老板都能摆脱人工智障,进入真AI领域。