Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
异萌
CNN-PADDLE
提交
a0d93d56
C
CNN-PADDLE
项目概览
异萌
/
CNN-PADDLE
通知
12
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CNN-PADDLE
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a0d93d56
编写于
5月 16, 2021
作者:
异萌
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add new file
这个是训练python源码 加载cnn卷积神经网络模型,以MNIST数据集为训练数据,训练模型
上级
85532c56
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
109 addition
and
0 deletion
+109
-0
train_main.py
train_main.py
+109
-0
未找到文件。
train_main.py
0 → 100644
浏览文件 @
a0d93d56
import
paddle
import
paddle.fluid
as
fluid
from
decode_binary_function
import
*
#这里导入解码二进制函数模块
from
cnn_function
import
*
from
cnn_net
import
ConvolutionalNeuralNetwork
import
numpy
as
np
import
struct
import
matplotlib.pyplot
as
plt
# 训练集文件
train_images_idx3_ubyte_file
=
r
'./MNIST/raw/train-images-idx3-ubyte'
# 训练集标签文件
train_labels_idx1_ubyte_file
=
r
'./MNIST/raw/train-labels-idx1-ubyte'
# 测试集文件
test_images_idx3_ubyte_file
=
r
'./MNIST/raw/t10k-images-idx3-ubyte'
# 测试集标签文件
test_labels_idx1_ubyte_file
=
r
'./MNIST/raw/t10k-labels-idx1-ubyte'
#train_set为60000条训练数据集图片,每张图片为28*28像素,数据集+数据集标签ndarray
train_x_ori
=
decode_idx3_ubyte
(
train_images_idx3_ubyte_file
)
train_y_set
=
decode_idx1_ubyte
(
train_labels_idx1_ubyte_file
)
print
(
'数据集train_x_ori形状:'
,
train_x_ori
.
shape
)
print
(
type
(
train_x_ori
))
print
(
'数据集标签train_y_set形状:'
,
train_y_set
.
shape
)
print
(
type
(
train_y_set
))
m_train_x_ori
=
train_x_ori
.
shape
[
0
]
print
(
'训练集含有图片数量:'
,
m_train_x_ori
)
train_x_flatten
=
train_x_ori
.
reshape
(
m_train_x_ori
,
-
1
)
#把train_x_ori展开为60000行
train_x_set
=
train_x_flatten
/
255
#数据归一化,因为每个像素为0-255,除以255让每一个数据都小于1
train_set
=
np
.
hstack
((
train_x_set
,
train_y_set
))
#60000行数据和60000行标签合并
print
(
'合并后训练集形状:'
,
train_set
.
shape
)
print
(
'合并后训练集类型:'
,
type
(
train_set
))
#print(train_set[0])#其中前784个为图片信息,第785个数据是标签信息
#定义飞桨动态图工作环境
with
fluid
.
dygraph
.
guard
():
#定义模型名称为mnist,调用了自己写的卷积神经网络
model
=
ConvolutionalNeuralNetwork
(
'mnist'
)
#定义优化器optimizer,利用adam优化器,学习率0.001,参数列表为模型参数
opt
=
fluid
.
optimizer
.
Adam
(
learning_rate
=
0.001
,
parameter_list
=
model
.
parameters
())
#迭代次数5次
EPOCH_NUM
=
50
#train_reader是一个生成器,类型为function
train_reader
=
read_data
(
train_set
)
#read_data()是一个生成器,会不断读取数据集里面的数据yeild
print
(
'观察yeild生成器返回对象类型:'
,
type
(
train_reader
))
#生成器不加括号是function类型,加上括号是generation类型
#train_reader1为generate类型,生成器生成的数据分批次读取,每个批次是16张图片
train_reader1
=
paddle
.
batch
(
train_reader
,
batch_size
=
16
)
#观察一下paddle.batch返回类型
print
(
'paddle.batch返回类型:'
,
type
(
train_reader1
))
#为function
#训练模型
with
fluid
.
dygraph
.
guard
():
# 定义外层循环
for
pass_num
in
range
(
EPOCH_NUM
):
# 定义内层循环
for
batch_id
,
data
in
enumerate
(
train_reader1
()):
#这里的train_reader1加上了括号,就是一个生成器,总共60000张图片,分批生成
#观察data的结构至关重要,train_reader1 yeild的了两个数据,一个是前784个数据是图片,第785个数据是label,所以
#data是一个列表,列表长度是16,data[0]-data[15]共16个列表元素,data[1]是一个元组,
#print('data的类型:',type(data))
#print('data的长度:',len(data))
#print('data列表中元素的类型:',type(data[0]))
#print(data[0])
images
=
np
.
array
([
x
[
0
].
reshape
(
1
,
28
,
28
)
for
x
in
data
],
np
.
float32
)
labels
=
np
.
array
([
x
[
1
]
for
x
in
data
]).
astype
(
'int64'
).
reshape
(
-
1
,
1
)
#print('images类型:',type(images))
#print(images.shape)
#print('labels类型:', type(labels))
#print(labels.shape)
#print(images[0])
#y=images[0].reshape(28,28)
#plt.imshow(y)
#plt.show()
#print(labels)
#print(len(data_label))
#print(data_label)
# 将numpy数据转为飞桨动态图variable形式
image
=
fluid
.
dygraph
.
to_variable
(
images
)
label
=
fluid
.
dygraph
.
to_variable
(
labels
)
# 第一步:前向计算
predict
=
model
(
image
)
# 第二步:计算损失
loss
=
fluid
.
layers
.
cross_entropy
(
predict
,
label
)
avg_loss
=
fluid
.
layers
.
mean
(
loss
)
# 第三步:计算精度
acc
=
fluid
.
layers
.
accuracy
(
predict
,
label
)
#第四步:打印数据
if
batch_id
%
500
==
0
:
print
(
"pass:{},batch_id:{},train_loss:{},train_acc:{}"
.
format
(
pass_num
,
batch_id
,
avg_loss
.
numpy
(),
acc
.
numpy
()))
# 第五步:反向传播
avg_loss
.
backward
()
# 最小化loss,更新参数
opt
.
minimize
(
avg_loss
)
# 清除梯度
model
.
clear_gradients
()
# 保存模型文件到指定路径
fluid
.
save_dygraph
(
model
.
state_dict
(),
'mnist'
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录