吴恩达编程作业L4W1-作业2

这个作业和L2W3的区别是:这个用的是卷积网络对图像进行分类,L2W3用的是传统全连接神经网络进行分类,数据集一样,实验结果是使用卷积神经网络处理这个数据集的准确性达到了百分之百(测试集略低,有点过拟合,不过相较于使用全连接神经网络好多了),果然图像的事还是交给卷积来比较好。

import tensorflow as tf
from PIL import Image
from tf_utils import *
import matplotlib.pyplot as plt

print(tf.__version__)
class LossHistory(tf.keras.callbacks.Callback):
    def on_train_begin(self, logs=None):
        self.losses = []

    def on_epoch_end(self, epoch, logs=None):
        self.losses.append(logs['loss'])
def loss_callback(epoch, logs):
    loss = logs['loss']
    print('Epoch {}: Loss = {}'.format(epoch, loss.numpy()))
# 加载数据
X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()
print(X_train_orig.shape)
print(Y_train_orig.shape)

# 将数据归一化
X_train_orig=X_train_orig/255.0
X_test_orig=X_test_orig/255.0
# 转换标签的形状
Y_train_orig=Y_train_orig.T
Y_train_orig=np.squeeze(Y_train_orig)
Y_test_orig=Y_test_orig.T
Y_test_orig=np.squeeze(Y_test_orig)

# 显示图像
# plt.figure(figsize=(10,10))
# for i in range(25):
#     plt.subplot(5,5,i+1)
#     plt.xticks([])
#     plt.yticks([])
#     plt.grid(False)
#     plt.imshow(X_train_orig[i])
#     plt.xlabel(Y_train_orig[i])
# plt.show()

# 创建模型
model=tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(64,64,3)))
model.add(tf.keras.layers.MaxPool2D((2,2)))
model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu'))
model.add(tf.keras.layers.MaxPool2D((2,2)))
model.add(tf.keras.layers.Conv2D(64,(5,5),activation='relu'))
# 以下是全连接层
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(32,activation='relu'))
model.add(tf.keras.layers.Dense(6))

# model.summary()
# # 编译模型
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

# # 设置自定义回调函数
loss_history = LossHistory()
# # 训练模型
model.fit(X_train_orig,Y_train_orig,epochs=50,validation_data=(X_test_orig,Y_test_orig),callbacks=[loss_history])

# # 将损失值转换为 NumPy 数组
losses_np = np.array(loss_history.losses)
plt.plot(losses_np)
plt.show()

# # 保存模型
model.save("model.h5")

# 预测自己的照片
# 加载模型
# model=tf.keras.models.load_model("F:\\Desktop\\pythonworkspace\\Deep_learning\\L4W1\\work2\\model.h5")
# # 给模型添加一个softmax层
# model.add(tf.keras.layers.Softmax())

# # 加载自己的照片
# path="data\input_picture.jpg"
# img=tf.keras.preprocessing.image.load_img(path)
# img_arry=tf.keras.preprocessing.image.img_to_array(img)
# img_arry=np.expand_dims(img_arry,axis=0)

# predict=model.predict(img_arry)
# print(np.argmax(predict))



自己的拍的照片
在这里插入图片描述
结果:
在这里插入图片描述

结果为2,说明预测正确

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值