Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
seminar-breakout
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shashank Suhas
seminar-breakout
Commits
4879a4e4
You need to sign in or sign up before continuing.
Commit
4879a4e4
authored
Jan 16, 2018
by
Yuxin Wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
clean-ups
parent
4f0cb51e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
20 additions
and
12 deletions
+20
-12
examples/keras/imagenet-resnet-keras.py
examples/keras/imagenet-resnet-keras.py
+12
-10
tensorpack/contrib/keras.py
tensorpack/contrib/keras.py
+3
-2
tensorpack/train/interface.py
tensorpack/train/interface.py
+5
-0
No files found.
examples/keras/imagenet-resnet-keras.py
View file @
4879a4e4
...
@@ -8,27 +8,27 @@ import tensorflow as tf
...
@@ -8,27 +8,27 @@ import tensorflow as tf
import
argparse
import
argparse
from
tensorpack
import
InputDesc
,
QueueInput
,
StagingInput
,
SyncMultiGPUTrainerReplicated
from
tensorpack
import
InputDesc
,
QueueInput
,
StagingInput
,
SyncMultiGPUTrainerReplicated
from
tensorpack.dataflow
import
MapData
,
FakeData
,
MapDataComponent
from
tensorpack.dataflow
import
FakeData
,
MapDataComponent
from
tensorpack.utils
import
logger
from
tensorpack.utils
import
logger
from
tensorpack.utils.gpu
import
get_nr_gpu
from
tensorpack.utils.gpu
import
get_nr_gpu
from
tensorpack.contrib.keras
import
KerasModel
from
tensorpack.contrib.keras
import
KerasModel
from
tensorpack.callbacks
import
*
from
tensorpack.callbacks
import
*
from
tensorpack.tfutils
import
get_current_tower_context
from
tensorflow
import
keras
from
tensorflow.python.keras.layers
import
*
from
tensorflow.python.keras.layers
import
*
from
imagenet_utils
import
get_imagenet_dataflow
,
fbresnet_augmentor
,
ImageNetModel
from
imagenet_utils
import
get_imagenet_dataflow
,
fbresnet_augmentor
,
ImageNetModel
TOTAL_BATCH_SIZE
=
512
TOTAL_BATCH_SIZE
=
512
BASE_LR
=
0.1
*
(
TOTAL_BATCH_SIZE
//
256
)
BASE_LR
=
0.1
*
(
TOTAL_BATCH_SIZE
//
256
)
def
bn
(
x
,
name
,
zero_init
=
False
):
def
bn
(
x
,
name
,
zero_init
=
False
):
return
BatchNormalization
(
return
BatchNormalization
(
axis
=
1
,
name
=
name
,
fused
=
True
,
axis
=
1
,
name
=
name
,
fused
=
True
,
momentum
=
0.9
,
epsilon
=
1e-5
,
momentum
=
0.9
,
epsilon
=
1e-5
,
gamma_initializer
=
'zeros'
if
zero_init
else
'ones'
)(
x
)
gamma_initializer
=
'zeros'
if
zero_init
else
'ones'
)(
x
)
def
conv
(
x
,
filters
,
kernel
,
strides
=
1
,
name
=
None
):
def
conv
(
x
,
filters
,
kernel
,
strides
=
1
,
name
=
None
):
return
Conv2D
(
filters
,
kernel
,
name
=
name
,
return
Conv2D
(
filters
,
kernel
,
name
=
name
,
strides
=
strides
,
use_bias
=
False
,
padding
=
'same'
,
strides
=
strides
,
use_bias
=
False
,
padding
=
'same'
,
...
@@ -36,6 +36,7 @@ def conv(x, filters, kernel, strides=1, name=None):
...
@@ -36,6 +36,7 @@ def conv(x, filters, kernel, strides=1, name=None):
scale
=
2.0
,
mode
=
'fan_out'
,
distribution
=
'normal'
),
scale
=
2.0
,
mode
=
'fan_out'
,
distribution
=
'normal'
),
kernel_regularizer
=
tf
.
keras
.
regularizers
.
l2
(
5e-5
))(
x
)
kernel_regularizer
=
tf
.
keras
.
regularizers
.
l2
(
5e-5
))(
x
)
def
identity_block
(
input_tensor
,
kernel_size
,
filters
,
stage
,
block
):
def
identity_block
(
input_tensor
,
kernel_size
,
filters
,
stage
,
block
):
filters1
,
filters2
,
filters3
=
filters
filters1
,
filters2
,
filters3
=
filters
conv_name_base
=
'res'
+
str
(
stage
)
+
block
+
'_branch'
conv_name_base
=
'res'
+
str
(
stage
)
+
block
+
'_branch'
...
@@ -56,6 +57,7 @@ def identity_block(input_tensor, kernel_size, filters, stage, block):
...
@@ -56,6 +57,7 @@ def identity_block(input_tensor, kernel_size, filters, stage, block):
x
=
Activation
(
'relu'
)(
x
)
x
=
Activation
(
'relu'
)(
x
)
return
x
return
x
def
conv_block
(
input_tensor
,
kernel_size
,
filters
,
stage
,
block
,
strides
=
(
2
,
2
)):
def
conv_block
(
input_tensor
,
kernel_size
,
filters
,
stage
,
block
,
strides
=
(
2
,
2
)):
filters1
,
filters2
,
filters3
=
filters
filters1
,
filters2
,
filters3
=
filters
conv_name_base
=
'res'
+
str
(
stage
)
+
block
+
'_branch'
conv_name_base
=
'res'
+
str
(
stage
)
+
block
+
'_branch'
...
@@ -72,7 +74,8 @@ def conv_block(input_tensor, kernel_size, filters, stage, block, strides=(2, 2))
...
@@ -72,7 +74,8 @@ def conv_block(input_tensor, kernel_size, filters, stage, block, strides=(2, 2))
x
=
conv
(
x
,
filters3
,
(
1
,
1
),
name
=
conv_name_base
+
'2c'
)
x
=
conv
(
x
,
filters3
,
(
1
,
1
),
name
=
conv_name_base
+
'2c'
)
x
=
bn
(
x
,
name
=
bn_name_base
+
'2c'
,
zero_init
=
True
)
x
=
bn
(
x
,
name
=
bn_name_base
+
'2c'
,
zero_init
=
True
)
shortcut
=
conv
(
input_tensor
,
shortcut
=
conv
(
input_tensor
,
filters3
,
(
1
,
1
),
strides
=
strides
,
filters3
,
(
1
,
1
),
strides
=
strides
,
name
=
conv_name_base
+
'1'
)
name
=
conv_name_base
+
'1'
)
shortcut
=
bn
(
shortcut
,
name
=
bn_name_base
+
'1'
)
shortcut
=
bn
(
shortcut
,
name
=
bn_name_base
+
'1'
)
...
@@ -81,6 +84,7 @@ def conv_block(input_tensor, kernel_size, filters, stage, block, strides=(2, 2))
...
@@ -81,6 +84,7 @@ def conv_block(input_tensor, kernel_size, filters, stage, block, strides=(2, 2))
x
=
Activation
(
'relu'
)(
x
)
x
=
Activation
(
'relu'
)(
x
)
return
x
return
x
def
resnet50
(
inputs
):
def
resnet50
(
inputs
):
input
=
tf
.
layers
.
Input
(
tensor
=
inputs
[
0
])
input
=
tf
.
layers
.
Input
(
tensor
=
inputs
[
0
])
...
@@ -132,7 +136,7 @@ if __name__ == '__main__':
...
@@ -132,7 +136,7 @@ if __name__ == '__main__':
parser
.
add_argument
(
'--data'
,
help
=
'ILSVRC dataset dir'
)
parser
.
add_argument
(
'--data'
,
help
=
'ILSVRC dataset dir'
)
parser
.
add_argument
(
'--fake'
,
help
=
'use fakedata to test or benchmark this model'
,
action
=
'store_true'
)
parser
.
add_argument
(
'--fake'
,
help
=
'use fakedata to test or benchmark this model'
,
action
=
'store_true'
)
args
=
parser
.
parse_args
()
args
=
parser
.
parse_args
()
logger
.
set_logger_dir
(
"train_log/
dynamic-bn
"
)
logger
.
set_logger_dir
(
"train_log/
imagenet-resnet-keras
"
)
tf
.
keras
.
backend
.
set_image_data_format
(
'channels_first'
)
tf
.
keras
.
backend
.
set_image_data_format
(
'channels_first'
)
...
@@ -154,13 +158,11 @@ if __name__ == '__main__':
...
@@ -154,13 +158,11 @@ if __name__ == '__main__':
df_train
=
MapDataComponent
(
df_train
,
one_hot
,
1
)
df_train
=
MapDataComponent
(
df_train
,
one_hot
,
1
)
df_val
=
MapDataComponent
(
df_val
,
one_hot
,
1
)
df_val
=
MapDataComponent
(
df_val
,
one_hot
,
1
)
input
=
QueueInput
(
df_train
)
input
=
StagingInput
(
input
)
M
=
KerasModel
(
M
=
KerasModel
(
resnet50
,
resnet50
,
inputs_desc
=
[
InputDesc
(
tf
.
uint8
,
[
None
,
224
,
224
,
3
],
'images'
)],
inputs_desc
=
[
InputDesc
(
tf
.
uint8
,
[
None
,
224
,
224
,
3
],
'images'
)],
targets_desc
=
[
InputDesc
(
tf
.
float32
,
[
None
,
1000
],
'labels'
)],
targets_desc
=
[
InputDesc
(
tf
.
float32
,
[
None
,
1000
],
'labels'
)],
input
=
input
,
input
=
df_train
,
trainer
=
SyncMultiGPUTrainerReplicated
(
nr_gpu
))
trainer
=
SyncMultiGPUTrainerReplicated
(
nr_gpu
))
lr
=
tf
.
get_variable
(
'learning_rate'
,
initializer
=
0.1
,
trainable
=
False
)
lr
=
tf
.
get_variable
(
'learning_rate'
,
initializer
=
0.1
,
trainable
=
False
)
...
@@ -185,7 +187,7 @@ if __name__ == '__main__':
...
@@ -185,7 +187,7 @@ if __name__ == '__main__':
if
not
args
.
fake
:
if
not
args
.
fake
:
callbacks
.
append
(
callbacks
.
append
(
DataParallelInferenceRunner
(
DataParallelInferenceRunner
(
df_val
,
ScalarStats
([
'categorical_accuracy'
]),
list
(
range
(
nr_gpu
))
))
df_val
,
ScalarStats
([
'categorical_accuracy'
]),
nr_gpu
))
M
.
fit
(
M
.
fit
(
steps_per_epoch
=
100
if
args
.
fake
else
1281167
//
TOTAL_BATCH_SIZE
,
steps_per_epoch
=
100
if
args
.
fake
else
1281167
//
TOTAL_BATCH_SIZE
,
...
...
tensorpack/contrib/keras.py
View file @
4879a4e4
...
@@ -10,6 +10,7 @@ from tensorflow.python.keras import metrics as metrics_module
...
@@ -10,6 +10,7 @@ from tensorflow.python.keras import metrics as metrics_module
from
..models.regularize
import
regularize_cost_from_collection
from
..models.regularize
import
regularize_cost_from_collection
from
..train
import
Trainer
,
SimpleTrainer
,
SyncMultiGPUTrainerParameterServer
from
..train
import
Trainer
,
SimpleTrainer
,
SyncMultiGPUTrainerParameterServer
from
..train.trainers
import
DistributedTrainerBase
from
..train.trainers
import
DistributedTrainerBase
from
..train.interface
import
apply_default_prefetch
from
..callbacks
import
(
from
..callbacks
import
(
Callback
,
InferenceRunnerBase
,
InferenceRunner
,
CallbackToHook
,
Callback
,
InferenceRunnerBase
,
InferenceRunner
,
CallbackToHook
,
ScalarStats
)
ScalarStats
)
...
@@ -177,7 +178,7 @@ class KerasModel(object):
...
@@ -177,7 +178,7 @@ class KerasModel(object):
get_model ( -> keras.model.Model):
get_model ( -> keras.model.Model):
inputs_desc ([InputDesc]):
inputs_desc ([InputDesc]):
targets_desc ([InputDesc]):
targets_desc ([InputDesc]):
input (InputSource):
input (InputSource
| DataFlow
):
trainer (Trainer): the default will check the number of available
trainer (Trainer): the default will check the number of available
GPUs and use them all.
GPUs and use them all.
"""
"""
...
@@ -194,7 +195,7 @@ class KerasModel(object):
...
@@ -194,7 +195,7 @@ class KerasModel(object):
assert
isinstance
(
trainer
,
Trainer
),
trainer
assert
isinstance
(
trainer
,
Trainer
),
trainer
assert
not
isinstance
(
trainer
,
DistributedTrainerBase
)
assert
not
isinstance
(
trainer
,
DistributedTrainerBase
)
self
.
input
=
input
self
.
input
=
apply_default_prefetch
(
input
,
trainer
)
self
.
trainer
=
trainer
self
.
trainer
=
trainer
def
compile
(
self
,
optimizer
,
loss
,
metrics
=
None
):
def
compile
(
self
,
optimizer
,
loss
,
metrics
=
None
):
...
...
tensorpack/train/interface.py
View file @
4879a4e4
...
@@ -22,12 +22,16 @@ def apply_default_prefetch(input_source_or_dataflow, trainer):
...
@@ -22,12 +22,16 @@ def apply_default_prefetch(input_source_or_dataflow, trainer):
Args:
Args:
input_source_or_dataflow(InputSource | DataFlow):
input_source_or_dataflow(InputSource | DataFlow):
trainer (Trainer):
trainer (Trainer):
Returns:
InputSource
"""
"""
if
not
isinstance
(
input_source_or_dataflow
,
InputSource
):
if
not
isinstance
(
input_source_or_dataflow
,
InputSource
):
# to mimic same behavior of the old trainer interface
# to mimic same behavior of the old trainer interface
if
type
(
trainer
)
==
SimpleTrainer
:
if
type
(
trainer
)
==
SimpleTrainer
:
input
=
FeedInput
(
input_source_or_dataflow
)
input
=
FeedInput
(
input_source_or_dataflow
)
else
:
else
:
logger
.
info
(
"Automatically applying QueueInput on the DataFlow."
)
input
=
QueueInput
(
input_source_or_dataflow
)
input
=
QueueInput
(
input_source_or_dataflow
)
else
:
else
:
input
=
input_source_or_dataflow
input
=
input_source_or_dataflow
...
@@ -39,6 +43,7 @@ def apply_default_prefetch(input_source_or_dataflow, trainer):
...
@@ -39,6 +43,7 @@ def apply_default_prefetch(input_source_or_dataflow, trainer):
assert
tf
.
test
.
is_gpu_available
()
assert
tf
.
test
.
is_gpu_available
()
if
not
isinstance
(
input
,
(
StagingInput
,
DummyConstantInput
)):
if
not
isinstance
(
input
,
(
StagingInput
,
DummyConstantInput
)):
logger
.
info
(
"Automatically applying StagingInput on the DataFlow."
)
input
=
StagingInput
(
input
)
input
=
StagingInput
(
input
)
return
input
return
input
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment