Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小吕同学吖
ImageClassification
提交
4d0b6783
I
ImageClassification
项目概览
小吕同学吖
/
ImageClassification
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
ImageClassification
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4d0b6783
编写于
7月 30, 2021
作者:
小吕同学吖
😲
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add the codes of train and test
上级
6b984b14
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
173 addition
and
0 deletion
+173
-0
test.py
test.py
+53
-0
train.py
train.py
+120
-0
未找到文件。
test.py
0 → 100644
浏览文件 @
4d0b6783
import
torch
import
torchvision
import
torchvision.transforms
as
transforms
from
torch.utils.data
import
DataLoader
from
nets.ghostnet
import
ghostnet
transform_test
=
transforms
.
Compose
([
transforms
.
CenterCrop
(
960
),
transforms
.
Resize
(
512
),
transforms
.
ToTensor
()
])
testset
=
torchvision
.
datasets
.
ImageFolder
(
root
=
'./dataset/test'
,
transform
=
transform_test
)
testloader
=
DataLoader
(
testset
,
batch_size
=
8
,
shuffle
=
False
,
num_workers
=
8
)
# 使用gpu
use_cuda
=
torch
.
cuda
.
is_available
()
device
=
torch
.
device
(
"cuda"
if
use_cuda
else
"cpu"
)
# 模型定义
net
=
ghostnet
().
to
(
device
)
def
test
():
print
(
"Load checkpoint..."
)
net
.
load_state_dict
(
torch
.
load
(
'./model_MESSIDOR/model_MESSIDOR_3000.pkl'
))
print
(
"test begin!"
)
with
torch
.
no_grad
():
accuracy
=
0
total
=
0
for
data
in
testloader
:
# 开始测试
net
.
eval
()
images
,
labels
=
data
images
,
labels
=
images
.
to
(
device
),
labels
.
to
(
device
)
outputs
=
net
(
images
)
_
,
predicted
=
torch
.
max
(
outputs
.
data
,
1
)
# 返回每一行中最大值的那个元素,且返回其索引(得分高的那一类)
total
+=
labels
.
size
(
0
)
accuracy
+=
(
predicted
==
labels
).
sum
()
accuracy
=
accuracy
.
item
()
# acc为tensor, total为int型, acc/total自动将小数点后数字归零. 所以需要先将acc通过.item()转化成int型.
# 输出测试准确率
print
(
'测试准确率为: {:.2f}%'
.
format
(
100
*
accuracy
/
total
))
if
__name__
==
'__main__'
:
test
()
\ No newline at end of file
train.py
0 → 100644
浏览文件 @
4d0b6783
import
torch
import
torchvision
import
torch.nn
as
nn
import
torch.optim
as
optim
from
torch.utils.data
import
DataLoader
import
torchvision.transforms
as
transforms
import
os
import
sys
from
nets.ghostnet
import
ghostnet
sys
.
path
.
append
(
os
.
getcwd
())
os
.
environ
[
"CUDA_VISIBLE_DEVICES"
]
=
"0"
# 指定一块gpu为可见
# #############创建数据加载器###################
print
(
'data loaded begin!'
)
# 预处理
data_transform
=
transforms
.
Compose
([
transforms
.
CenterCrop
(
960
),
transforms
.
Resize
(
512
),
transforms
.
ToTensor
()
])
# 加载训练集数据
train_dataset
=
torchvision
.
datasets
.
ImageFolder
(
root
=
'./datasets/train'
,
transform
=
data_transform
)
train_data
=
DataLoader
(
train_dataset
,
batch_size
=
8
,
shuffle
=
True
,
num_workers
=
8
,
drop_last
=
True
)
# 加载验证集数据
val_dataset
=
torchvision
.
datasets
.
ImageFolder
(
root
=
'./datasets/val'
,
transform
=
data_transform
)
val_data
=
DataLoader
(
val_dataset
,
batch_size
=
8
,
shuffle
=
True
,
num_workers
=
8
,
drop_last
=
True
)
print
(
type
(
train_data
))
print
(
'data loaded done!'
)
# ##################创建网络模型###################
model
=
ghostnet
()
# ##############训练#################
device
=
torch
.
device
(
"cuda:0"
if
torch
.
cuda
.
is_available
()
else
"cpu"
)
if
torch
.
cuda
.
device_count
()
>
1
:
model
=
nn
.
DataParallel
(
model
)
model
=
model
.
to
(
device
)
criterion
=
nn
.
CrossEntropyLoss
()
optimizer
=
optim
.
Adam
(
model
.
parameters
(),
weight_decay
=
0.001
)
nums_epoch
=
3001
# 训练epoch的数量,动态调整
print
(
'training begin!'
)
# 开始训练
train_losses
=
[]
train_acces
=
[]
val_losses
=
[]
val_acces
=
[]
S
=
[]
for
epoch
in
range
(
nums_epoch
):
train_loss
=
0
train_acc
=
0
model
=
model
.
train
()
# 训练开始
print
(
'Epoch '
+
str
(
epoch
+
1
)
+
' begin!'
)
for
img_train
,
label_train
in
train_data
:
img_train
=
img_train
.
to
(
device
)
label_train
=
label_train
.
to
(
device
)
# 前向传播
out
=
model
(
img_train
)
optimizer
.
zero_grad
()
loss
=
criterion
(
out
,
label_train
)
# 反向传播
loss
.
backward
()
optimizer
.
step
()
# 记录误差
train_loss
+=
loss
.
item
()
# 计算分类的准确率
_
,
pred
=
out
.
max
(
1
)
num_correct
=
(
pred
==
label_train
).
sum
().
item
()
acc
=
num_correct
/
img_train
.
shape
[
0
]
train_acc
+=
acc
train_losses
.
append
(
train_loss
/
len
(
train_data
))
train_acces
.
append
(
train_acc
/
len
(
train_data
))
print
(
'Epoch'
+
str
(
epoch
+
1
)
+
' Train done!'
)
val_loss
=
0
val_acc
=
0
# 验证开始
print
(
'Epoch'
+
str
(
epoch
+
1
)
+
' Val begin!'
)
for
img_val
,
label_val
in
val_data
:
img_val
=
img_val
.
to
(
device
)
label_val
=
label_val
.
to
(
device
)
out
=
model
(
img_val
)
loss
=
criterion
(
out
,
label_val
)
# 记录误差
val_loss
+=
loss
.
item
()
# 计算分类的准确率
_
,
pred
=
out
.
max
(
1
)
num_correct
=
(
pred
==
label_val
).
sum
().
item
()
acc
=
num_correct
/
img_val
.
shape
[
0
]
val_acc
+=
acc
val_losses
.
append
(
val_loss
/
len
(
val_data
))
val_acces
.
append
(
val_acc
/
len
(
val_data
))
print
(
'Epoch'
+
str
(
epoch
+
1
)
+
' Val done!'
)
print
(
'Epoch {} ,Train Loss: {} ,Train Accuracy: {} ,Test Loss: {} ,Test Accuracy: {}'
.
format
(
epoch
+
1
,
train_loss
/
len
(
train_data
),
train_acc
/
len
(
train_data
),
val_loss
/
len
(
val_data
),
val_acc
/
len
(
val_data
)))
s
=
(
'Epoch {} ,Train Loss: {} ,Train Accuracy: {} ,Test Loss: {} ,Test Accuracy: {}'
.
format
(
epoch
+
1
,
train_loss
/
len
(
train_data
),
train_acc
/
len
(
train_data
),
val_loss
/
len
(
val_data
),
val_acc
/
len
(
val_data
)))
S
.
append
(
s
)
if
epoch
%
100
==
0
:
torch
.
save
(
model
.
state_dict
(),
'./models/model_MESSIDOR/model_MESSIDOR_{}.pkl'
.
format
(
epoch
))
print
(
'model saved done!'
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录