0
点赞
收藏
分享

微信扫一扫

DL_WITH_PY系统学习(第2章)

ZGtheGreat 2022-12-22 阅读 63



DL_WITH_PY系统学习(第2章)_3D


本节提示:


1、第一个dl例子;


2、tensor和tensor操作;


3、DL如何通过逆向传播和梯度下降达到学习目的。



2.1 输入数据集的格式


from keras.datasets import mnist


(train_images,train_labels),(test_images,test_labels) = mnist.load_data()


print( 'train_image_shape',train_images.shape)


print( 'train_labels_len', len(train_labels))


print( 'train_labels',train_labels)




train_image_shape (60000, 28, 28)


train_labels_len 60000


train_labels [5 0 4 ... 5 6 8]


2.2训练网络结构


network = models.Sequential()


network.add(layers.Dense( 512, activation = 'relu', input_shape = ( 28* 28,)))


network.add(layers.Dense( 10, activation= 'softmax'))


layers(层)是训练网络的最基本组成部分,它读入数据,输出对于结果来说更有用的结果。


我们这里建立的层是全连接层,注意这里的input_shape用了(28*28,)这种表示方式。最后输出的结果是10选1的结果。



2.3编译模型


network.compile( optimizer= 'rmaprop', loss= 'categorical_crossentropy', metrics=[ 'accuracy'])



下一步,为了让DL能够开始训练,我们还需要额外的3个构建:


一个损失函数(a loss function)—用于计算系统训练的准确效果;


一个优化函数(an optimizer)—用于定义优化方法;


在训练的时候的度量—一般都是acc。



2.4处理数据集


在之前的读入的数据中,图片保存在类似(60000,28,28)这样的结构中,不方便处理,这里进行转换


train_images = train_images.reshape(( 60000, 28* 28))


train_images = train_images.astype( 'float32')/ 255


test_images = test_images.reshape(( 10000, 28* 28))


test_images = test_images.astype( 'float32')/ 255


一方面是reshape,另一方面是转换成float32结构。这两个都是非常常见的操作。



2.5进行one_hot处理


from keras.utils import to_categorical


train_labels = to_categorical(train_labels)


test_labels = to_categorical(test_labels)


变成这样:



DL_WITH_PY系统学习(第2章)_数据集_02



2.6 现在就尝试训练



network.fit(train_images,train_labels, epochs= 5, batch_size= 128)



回顾一下这里输入模型的数据



rain_images 是数量*(长*宽)



train_labes 是onehot格式。这两个部分首先要清楚。



并且进行最后的验证



test_loss,test_acc = network.evaluate(test_images,test_labels)


 


注意,即使是这里的这些非常简单的函数和数据,如果没有GPU的支持,也可能是需要较长时间才能够运行的。



2.7 什么是tensor


经常看见的tensor这个词,所谓tensor,就是数据的容器(a container for data)


比如


np.array(12)就是一个0D tensor


np.array([12,3,6,14])一个列表,就是一个1D tensor


np.array([12,3,6,14],


             [6,79,35,1],


             [7,80,4,36,2] )


一个列表的组合,就是一个2D tensor


再往上堆,就是3D tensor,也是比较好理解的



2.8  tensor的组成


主要包括3个部分


维度(rank)比如3D tensor显而易见就是3d的                     对应ndim


形状(shape)也就是具体填充tensor里面的具体内容       对于shape


种类(data type) float32 或者 float64之类                        对于dtype



具体打印一个数据


import matplotlib.pyplot as plt


digit = train_images[ 3]


plt.imshow(digit, cmap=plt.cm.binary)


plt.show()


这里这个两次show令人印象深刻。



2.9实际情况下的图像存储


一套256*256的128 gray的图片集可以保存在(128,256,256,1)的4d tensor中;而一套同样大小的彩色图像可以保持在(128,256,256,3)的tensor中。


如果是video data,往往必须是5维数据。

举报

相关推荐

0 条评论