从零开始的彩笔深度学习成长之路(day1)---这个po主明明很菜却过分咸鱼

a 夏天 提交于 2020-02-23 01:39:52

又是咸鱼无所事事的一天

11点半起床,打开电脑,CSGO启动!!!!!!!!!!!
游戏失败,关闭游戏,气急败坏,无所事事again
不如…学习一下深度学习?
pip install tensorflow
spyder启动!!!!!!!
打开tensorflow官方教程,开始抄代码!
day1 没有目标,能给和我画出美美的图出来装逼即可。

import tensorflow as tf
from tensorflow import keras '''  将kersa作为一个单独的 '''
import numpy as np
import matplotlib.pyplot as plt
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()

上面这波呢,这波是肉蛋葱鸡,哦不不不,是导入数据,keras自带有一个叫做fashion_mnist的图像集合,python赋值命令都是用逗号隔开的,至于为什么分为两个(),()我也不叽到

接下来先考察一下收到的数据,然后进行下一步的算法
测试集
不难发现,收到的图片共1w个,每一个的格式都是28*28
测试集标签
不难发现,测试集图片的标签也是一w个,都用数字表示,但是为了易读,官方在程序中给每一个类型都设置了英文名,不过既然是我的咸鱼程序,就改为中文名吧

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
#上面是原版,下面是中文版
class_names = ['T恤', '裤子', '套头衫', '裙子', '外套',
               '凉鞋', '上衣', '运动鞋', '包', '高帮鞋']

接下来画个图,展示一下测试集中的数据



train_images = train_images / 255.0 #将0-255制的像素亮度转为0-1的
test_images = test_images / 255.0

plt.figure(figsize=(10,10))#首先创建画布,是一个长10宽10的画布
for i in range(25):
    plt.subplot(5,5,i+1) #将画布分为5*5个,
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()

在这里插入图片描述
好的,绘图很炫酷,装逼党一脸满足,今天到此为止?
不可!接下来才是最有技术(哈哈哈哈哈哈哈哈哈哈哈我真的太菜了)的地方

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10)
])

keras.layers.Flatten(input_shape=(28, 28)),首先是一个展平层,把28*28的图像展平为一条直线

keras.layers.Dense(128, activation=‘relu’), 然后是一个激活函数为relu的全连接层,接下来是构造一个有128个神经元的全连接层,大概作用就是左边和flatten层相连,右边和另一个dense层相连,然后进行卷积。

最后一个使用来输出分类结果的,一共有10各分类,就构建10个softmax神经元

那么神经网络的框架已经构建好了,就像搭建了一个水上滑梯,数据已经可以流程的从a流到b了,接下来就是定义水上滑梯的坡度,让数据能够划得顺畅,滑的开心,不难看出我们分别定义了Loss function 损失函数,就是定义什么是好什么是坏,然后让模型向好处去发展,然后是optimizer,就是优化滑梯的,最后是metrics,让我们直观的看到训练过程。

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=10)

好的,废话结束,上图!在这里插入图片描述
经过十次训练,终于达到了91%的正确率,非常的秀啊

当然还有就是用测试数据去测试一下效果

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

print('\nTest accuracy:', test_acc)

在这里插入图片描述
测试准确率也是差强人意,大体满意哈

那么如果要测试新的数据,应当如何去做呢

首先构建一个专门用来测试的模型,就是在原来的模型上层加一层用于输出概率的softmax层

probability_model = tf.keras.Sequential([model, 
                                         tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)
plt.imshow(test_images[0],cmap=plt.cm.binary)
plt.show()
print('预测答案' + str(class_names[np.argmax(predictions[0])]))


print('正确答案' + class_names[test_labels[0]])

在这里插入图片描述
好的收工完活!明日继续。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!