DL_WITH_PY系统学习(第2章)

简介: ​本节提示:1、第一个dl例子;2、tensor和tensor操作;3、DL如何通过逆向传播和梯度下降达到学习目的。2.1 输入数据集的格式from keras.datasets import mnist(train_images,train_labels),(test_images,test_labels) = mnist.
img_03e7b9cbd237c246dc041f4bb59a92dc.jpe
本节提示:
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)
变成这样:
img_877b7b88b31db91d8c9711cbcb34e9d2.png

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维数据。





附件列表

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
2月前
|
Unix Shell Linux
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
17 1
|
程序员 开发者 Python
#PY小贴士# py2 和 py3 的差别到底有多大?
虽然结论已经很明确,但我还是想客观地说一句:对于学习者来说,学 py2 还是 py3,真的没有太大差别。之所以这会成为一个问题
|
6月前
|
索引
yolov5--detect.py --v5.0版本-最新代码详细解释-2021-6-29号更新
yolov5--detect.py --v5.0版本-最新代码详细解释-2021-6-29号更新
253 0
yolov5--detect.py --v5.0版本-最新代码详细解释-2021-6-29号更新
|
6月前
yolov5--datasets.py --v5.0版本-数据集加载 最新代码详细解释2021-7-5更新
yolov5--datasets.py --v5.0版本-数据集加载 最新代码详细解释2021-7-5更新
270 0
|
6月前
|
机器学习/深度学习 索引
yolov5--loss.py --v5.0版本-最新代码详细解释-2021-7-1更新
yolov5--loss.py --v5.0版本-最新代码详细解释-2021-7-1更新
293 0
|
前端开发 芯片 Python
【python脚本】ICer的脚本入门训练——gen_tc
【python脚本】ICer的脚本入门训练——gen_tc
|
机器学习/深度学习 搜索推荐 TensorFlow
inference.py的代码解释
这是一个 Python 脚本,它用于导出经过训练的模型,使其可以在生产环境中进行推理。该脚本首先使用 TensorFlow 的 flags 定义了一些参数,如模型版本号、模型路径、输出目录等等。然后,它创建了一个名为 inference_graph 的 TensorFlow 图,并定义了一个 InferenceModel,该模型用于从输入数据中推断评级。
463 0
【YOLOV5-6.x讲解】DIY实验文件 models/experimental.py
【YOLOV5-6.x讲解】DIY实验文件 models/experimental.py
238 0
|
并行计算 数据可视化 PyTorch
|
存储 搜索推荐 Java
preprocess_data.py代码解释
循环遍历每个用户,对于每个用户,提取其对电影的评分。 创建一个与所有电影数量相同的评分数组,将相应的评分放置在数组的正确位置。 如果该用户没有评分电影,则跳过该用户。 返回所有用户的评分数组列表。
231 0