keras 第10课开始的所有代码

!pip install kaggle

!mkdir .kaggle

!ls -al .kaggle

import json
token = {“username”:“paulciel”,“key”:“17f419f033b67d2305c5265c2caf687f”}
with open(’/content/.kaggle/kaggle.json’, ‘w’) as file:
json.dump(token, file)

开始 kaggle 的一些配置

!mkdir -p ~/.kaggle
!cp /content/.kaggle/kaggle.json ~/.kaggle/kaggle.json

!pwd

!ls -al ~/.kaggle/kaggle.json

!chmod 600 ~/.kaggle/kaggle.json

!ls -al ~/.kaggle/kaggle.json

指定kaggle数据集保存的位置

!kaggle config set -n path -v /content

执行下列语句查看 Kaggle datasets。

!kaggle datasets list

!kaggle competitions download -c dogs-vs-cats -p /content

!unzip *.zip

!unzip train.zip

下面 是 按照 视频教程 ,进行 猫狗 文件夹的建立

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense, Flatten, BatchNormalization, Conv2D, MaxPool2D
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from sklearn.metrics import confusion_matrix
import itertools
import os
import shutil
import random
import glob
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter(action=‘ignore’, category=FutureWarning)
%matplotlib inline

建立 data 文件夹,以及 dogs-vs-cats 子文件夹,

以后,我们的 数据集 都将放置在 data 文件夹下,然后本次

我们就是 关于 dogs vs cats 的数据

os.makedirs(‘data/dogs-vs-cats’)

这一部分的代码 是为了 移动我下载的 图片 放置位置

从 /content/train 到 /content/data/dogs-vs-cats

os.chdir(’/content/train’)
for i in glob.glob(’*.jpg’):
shutil.move(i, ‘/content/data/dogs-vs-cats/’)
os.chdir(’/content’) # 回到 /content 目录,这是默认目录

建立文件夹

os.chdir(‘data/dogs-vs-cats’)
if os.path.isdir(‘train/dog’) is False:
os.makedirs(‘train/dog’)
os.makedirs(‘train/cat’)
os.makedirs(‘valid/dog’)
os.makedirs(‘valid/cat’)
os.makedirs(‘test/dog’)
os.makedirs(‘test/cat’)

!pwd

这一部分的代码 是为了 移动我错误的 图片 放置位置

os.chdir(’/content/data/dogs-vs-cats’)
print(“u1:”, os.getcwd())

os.chdir(‘train’)
j = 20
for i in glob.glob(’*.jpg’):
while (j > 0):
print(i)
j -= 1
#shutil.move(i, ‘…/’)
print(“u2”, os.getcwd())

这一部分的代码 是为了 移动我错误的 图片 放置位置

os.chdir(’/content/data/dogs-vs-cats/train’)
for i in glob.glob(’*.jpg’):
shutil.move(i, ‘…/’)
os.chdir(’/content/data/dogs-vs-cats/’)

划分 训练,验证,测试 集合

for i in random.sample(glob.glob(‘cat*’), 500):
shutil.move(i, ‘train/cat’)
for i in random.sample(glob.glob(‘dog*’), 500):
shutil.move(i, ‘train/dog’)
for i in random.sample(glob.glob(‘cat*’), 100):
shutil.move(i, ‘valid/cat’)
for i in random.sample(glob.glob(‘dog*’), 100):
shutil.move(i, ‘valid/dog’)
for i in random.sample(glob.glob(‘cat*’), 50):
shutil.move(i, ‘test/cat’)
for i in random.sample(glob.glob(‘dog*’), 50):
shutil.move(i, ‘test/dog’)

physical_devices = tf.config.experimental.list_physical_devices(‘GPU’)
print("Num GPUs Available: ", len(physical_devices))
tf.config.experimental.set_memory_growth(physical_devices[0], True)

train_path = ‘train’
valid_path = ‘valid’
test_path = ‘test’

train_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input)
.flow_from_directory(directory=train_path, target_size=(224,224), classes=[‘cat’, ‘dog’], batch_size=10)
valid_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input)
.flow_from_directory(directory=valid_path, target_size=(224,224), classes=[‘cat’, ‘dog’], batch_size=10)
test_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input)
.flow_from_directory(directory=test_path, target_size=(224,224), classes=[‘cat’, ‘dog’], batch_size=10, shuffle=False)

现在 看看我们 准备好的数据

imgs, labels = next(train_batches)

def plotImages(images_arr):
fig, axes = plt.subplots(1, 10, figsize=(20,20))
axes = axes.flatten()
for img, ax in zip(images_arr, axes):
ax.imshow(img)
ax.axis(‘off’)
plt.tight_layout()
plt.show()

plotImages(imgs)
print(labels)

12 课开始,建立并训练 一个 cnn 网络

但是有个问题,是,我的 笔记本 被从 gpu 运行时 断开了,然后之前保存的 data 就都不见了;;

好吧,我先把代码都给写好,明天再来 更新 数据集

建立模型

model = Sequential([
Conv2D(filters=32, kernel_size=(3, 3), activation=‘relu’, padding = ‘same’, input_shape=(224,224,3)),
MaxPool2D(pool_size=(2, 2), strides=2),
Conv2D(filters=64, kernel_size=(3, 3), activation=‘relu’, padding = ‘same’),
MaxPool2D(pool_size=(2, 2), strides=2),
Flatten(),
Dense(units=2, activation=‘softmax’)
])

编译模型

model.compile(optimizer=Adam(learning_rate=0.0001), loss=‘categorical_crossentropy’, metrics=[‘accuracy’])

开始训练,看看 训练 集 和 验证集 的表现吧!

model.fit(x=train_batches,
steps_per_epoch=len(train_batches),
validation_data=valid_batches,
validation_steps=len(valid_batches),
epochs=10,
verbose=2
)

13课 ,进行预测

tt1 : 准备好 数据呀

test_imgs, test_labels = next(test_batches)

tt2 : 看一看咱们 准备好的数据 是啥样

plotImages(test_imgs)
print(test_labels)

tt3 : 就开始 预测吧

predictions = model.predict(x=test_batches, steps=len(test_batches), verbose=0)

tt4 : 看看 本源 的 predictions

print(predictions)

tt5: 看看 round 之后的 predictions

np.round(predictions)

tt6 : 肉眼看准确率可不行,咱们用 混淆矩阵

cm = confusion_matrix(y_true=test_batches.classes, y_pred=np.argmax(predictions, axis=-1))

tt7: 这里 的 test_batches.classes 长什么样呢?

test_batches.classes

tt8: 本来我们的输出是一个二元组(这叫做one-hot encode),表示某个类别的可能性,现在我们希望 给出 最终答案,所以:

np.argmax(predictions, axis=-1)

print(predictions)

tt9: 从 sklearn 里面 直接拿来的 画图的 函数

def plot_confusion_matrix(cm, classes,
normalize=False,
title=‘Confusion matrix’,
cmap=plt.cm.Blues):
“”"
This function prints and plots the confusion matrix.
Normalization can be applied by setting normalize=True.
“”"
plt.imshow(cm, interpolation=‘nearest’, cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)

if normalize:
    cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
    print("Normalized confusion matrix")
else:
    print('Confusion matrix, without normalization')

print(cm)

thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
    plt.text(j, i, cm[i, j],
        horizontalalignment="center",
        color="white" if cm[i, j] > thresh else "black")

plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')

tt10: 咱得知道类别

test_batches.class_indices

金手指,我附加地 想看看 test_batches 是个包含什么属性 的对象,结果发现,好多属性,我疯了

dir(test_batches)

tt11: 还等啥,最后一波拿高地,二营长,你他娘的 matplot 呢? 给劳资画!

cm_plot_labels = [‘cat’,‘dog’]
plot_confusion_matrix(cm=cm, classes=cm_plot_labels, title=‘Confusion Matrix’)

劳资 要 保存 模型,需要: 确认一下 自己 在哪,在哪个 工作目录

os.getcwd()

os.chdir("…/…")

os.getcwd()

import os.path
if os.path.isfile(‘models/c10cnn_model.h5’) is False:
model.save(‘models/c10cnn_model.h5’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值