Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
hpvm-release
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
llvm
hpvm-release
Commits
dda75ceb
Commit
dda75ceb
authored
4 years ago
by
Hashim Sharif
Browse files
Options
Downloads
Patches
Plain Diff
Adding VGG16_CIFAR100 to new Benchmark structure
parent
ac3d21a3
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
llvm/projects/keras/src/vgg16_cifar100.py
+39
-72
39 additions, 72 deletions
llvm/projects/keras/src/vgg16_cifar100.py
with
39 additions
and
72 deletions
llvm/projects/keras/src/vgg16_cifar100.py
+
39
−
72
View file @
dda75ceb
from
__future__
import
print_function
import
os
import
sys
import
keras
from
keras.datasets
import
cifar100
from
keras.preprocessing.image
import
ImageDataGenerator
...
...
@@ -12,27 +13,20 @@ import numpy as np
from
keras.layers.core
import
Lambda
from
keras
import
backend
as
K
from
keras
import
regularizers
from
approxhpvm_translator
import
translate_to_approxhpvm
import
sys
from
weight_utils
import
dumpCalibrationData
from
Benchmark
import
Benchmark
from
frontend.weight_utils
import
dumpCalibrationData
from
frontend.approxhpvm_translator
import
translate_to_approxhpvm
class
cifar100vgg
:
def
__init__
(
self
,
train
=
True
):
self
.
num_classes
=
100
self
.
weight_decay
=
0.0005
self
.
x_shape
=
[
3
,
32
,
32
]
class
VGG16_CIFAR100
(
Benchmark
):
self
.
model
=
self
.
build_model
()
if
train
:
self
.
model
=
self
.
train
(
self
.
model
)
else
:
self
.
model
.
load_weights
(
'
cifar100vgg.h5
'
)
def
buildModel
(
self
):
def
build_model
(
self
):
# Build the network of vgg for 10 classes with massive dropout and weight decay as described in the paper.
# Build the network of vgg for 100 classes
self
.
weight_decay
=
0.0005
self
.
x_shape
=
[
3
,
32
,
32
]
model
=
Sequential
()
weight_decay
=
self
.
weight_decay
...
...
@@ -118,35 +112,21 @@ class cifar100vgg:
return
model
def
normalize
(
self
,
X_train
,
X_test
):
#this function normalize inputs for zero mean and unit variance
# it is used when training a model.
# Input: training set and test set
# Output: normalized training set and test set according to the trianing set statistics.
mean
=
np
.
mean
(
X_train
,
axis
=
(
0
,
1
,
2
,
3
))
std
=
np
.
std
(
X_train
,
axis
=
(
0
,
1
,
2
,
3
))
print
(
mean
)
print
(
std
)
X_train
=
(
X_train
-
mean
)
/
(
std
+
1e-7
)
X_test
=
(
X_test
-
mean
)
/
(
std
+
1e-7
)
return
X_train
,
X_test
def
normalize_production
(
self
,
x
):
#this function is used to normalize instances in production according to saved training set statistics
# Input: X - a training set
# Output X - a normalized training set according to normalization constants.
def
data_preprocess
(
self
):
#these values produced during first training and are general for the standard cifar10 training set normalization
mean
=
121.936
std
=
68.389
return
(
x
-
mean
)
/
(
std
+
1e-7
)
(
X_train
,
Y_train
),
(
X_test
,
Y_test
)
=
cifar100
.
load_data
()
def
predict
(
self
,
x
,
normalize
=
True
,
batch_size
=
50
):
if
normalize
:
x
=
self
.
normalize_production
(
x
)
return
self
.
model
.
predict
(
x
,
batch_size
)
mean
=
np
.
mean
(
X_train
,
axis
=
(
0
,
1
,
2
,
3
))
std
=
np
.
std
(
X_train
,
axis
=
(
0
,
1
,
2
,
3
))
X_train
=
(
X_train
-
mean
)
/
(
std
+
1e-7
)
X_test
=
(
X_test
-
mean
)
/
(
std
+
1e-7
)
def
train
(
self
,
model
):
return
X_train
,
Y_train
,
X_test
,
Y_test
def
trainModel
(
self
,
model
):
#training parameters
batch_size
=
128
...
...
@@ -166,12 +146,12 @@ class cifar100vgg:
y_train
=
keras
.
utils
.
to_categorical
(
y_train
,
self
.
num_classes
)
y_test
=
keras
.
utils
.
to_categorical
(
y_test
,
self
.
num_classes
)
def
lr_scheduler
(
epoch
):
return
learning_rate
*
(
0.5
**
(
epoch
//
lr_drop
))
reduce_lr
=
keras
.
callbacks
.
LearningRateScheduler
(
lr_scheduler
)
#data augmentation
datagen
=
ImageDataGenerator
(
featurewise_center
=
False
,
# set input mean to 0 over the dataset
...
...
@@ -188,56 +168,43 @@ class cifar100vgg:
datagen
.
fit
(
x_train
)
#optimization details
sgd
=
optimizers
.
SGD
(
lr
=
learning_rate
,
decay
=
lr_decay
,
momentum
=
0.9
,
nesterov
=
True
)
model
.
compile
(
loss
=
'
categorical_crossentropy
'
,
optimizer
=
sgd
,
metrics
=
[
'
accuracy
'
])
# training process in a for loop with learning rate drop every 25 epoches.
historytemp
=
model
.
fit_generator
(
datagen
.
flow
(
x_train
,
y_train
,
batch_size
=
batch_size
),
steps_per_epoch
=
x_train
.
shape
[
0
]
//
batch_size
,
epochs
=
maxepoches
,
validation_data
=
(
x_test
,
y_test
),
callbacks
=
[
reduce_lr
],
verbose
=
2
)
model
.
save_weights
(
'
cifar100vgg.h5
'
)
##### model.save_weights('cifar100vgg.h5')
return
model
if
__name__
==
'
__main__
'
:
K
.
set_image_data_format
(
'
channels_first
'
)
os
.
environ
[
"
CUDA_VISIBLE_DEVICES
"
]
=
"
1
"
(
x_train
,
y_train
),
(
x_test
,
y_test
)
=
cifar100
.
load_data
()
test_labels
=
y_test
train_labels
=
y_train
x_train
=
x_train
.
astype
(
'
float32
'
)
x_test
=
x_test
.
astype
(
'
float32
'
)
y_train
=
keras
.
utils
.
to_categorical
(
y_train
,
100
)
y_test
=
keras
.
utils
.
to_categorical
(
y_test
,
100
)
model
=
cifar100vgg
()
if
__name__
==
"
__main__
"
:
predicted_x
=
model
.
predict
(
x_test
)
os
.
environ
[
"
CUDA_VISIBLE_DEVICES
"
]
=
"
0
"
# Changing to NCHW format
K
.
set_image_data_format
(
'
channels_first
'
)
norm_test
=
model
.
normalize_production
(
x_test
)
x_train
=
model
.
normalize_production
(
x_train
)
dumpCalibrationData
(
"
calibration_data/vgg16_cifar100_calib.bin
"
,
x_train
,
"
calibration_data/vgg16_cifar100_train_labels.bin
"
,
train_labels
)
sys
.
exit
(
0
)
translate_to_approxhpvm
(
model
.
model
,
"
vgg16_cifar100_test/
"
,
norm_test
,
test_labels
,
"
vgg16_cifar100_front
"
,
y_test
)
### Parameters specific to each benchmark
reload_dir
=
"
/home/hsharif3/Gitlab/hpvm/llvm/projects/hpvm-tensor-rt/model_params/vgg16_cifar100/
"
keras_model_file
=
"
vgg16_cifar100.h5
"
hpvm_dir
=
"
data/vgg16_cifar100/
"
num_classes
=
100
vgg16_cifar100
=
VGG16_CIFAR100
(
"
vgg16_cifar100
"
,
reload_dir
,
keras_model_file
,
hpvm_dir
,
num_classes
)
residuals
=
(
np
.
argmax
(
predicted_x
,
1
)
!=
np
.
argmax
(
y_test
,
1
))
loss
=
sum
(
residuals
)
/
len
(
residuals
)
print
(
"
the validation 0/1 loss is:
"
,
loss
)
vgg16_cifar100
.
run
(
sys
.
argv
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment