Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
bob.learn.tensorflow
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
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
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
bob
bob.learn.tensorflow
Commits
f7213a21
There was a problem fetching the pipeline summary.
Commit
f7213a21
authored
7 years ago
by
Pavel KORSHUNOV
Browse files
Options
Downloads
Patches
Plain Diff
tfrecord with keras
parent
ce18693f
Branches
lstm
No related tags found
No related merge requests found
Pipeline
#
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
bob/learn/tensorflow/test/test_keras.py
+12
-12
12 additions, 12 deletions
bob/learn/tensorflow/test/test_keras.py
bob/learn/tensorflow/test/test_keras_tfrecord.py
+243
-0
243 additions, 0 deletions
bob/learn/tensorflow/test/test_keras_tfrecord.py
with
255 additions
and
12 deletions
bob/learn/tensorflow/test/test_keras.py
+
12
−
12
View file @
f7213a21
...
@@ -2,18 +2,18 @@
...
@@ -2,18 +2,18 @@
import
pprint
import
pprint
from
tensorflow.contrib.keras.python.
keras.models
import
Sequential
from
keras.models
import
Sequential
from
tensorflow.contrib.keras.python.
keras.engine
import
InputLayer
from
keras.engine
import
InputLayer
from
tensorflow.contrib.keras.python.
keras.layers
import
Dense
from
keras.layers
import
Dense
from
tensorflow.contrib.keras.python.
keras.layers
import
LSTM
from
keras.layers
import
LSTM
from
tensorflow.contrib.keras.python.
keras.layers
import
Lambda
from
keras.layers
import
Lambda
from
tensorflow.contrib.keras.python.
keras.layers
import
Flatten
from
keras.layers
import
Flatten
from
tensorflow.contrib.keras.python.
keras.layers
import
Reshape
from
keras.layers
import
Reshape
from
tensorflow.contrib.keras.python.
keras.datasets
import
mnist
from
keras.datasets
import
mnist
from
tensorflow.contrib.keras.python.
keras.utils
import
np_utils
from
keras.utils
import
np_utils
from
tensorflow.contrib.keras.python.
keras.utils.layer_utils
import
print_summary
from
keras.utils.layer_utils
import
print_summary
method
=
"
drop-first
"
# See if/elif block below for explanation
method
=
"
drop-first
"
# See if/elif block below for explanation
...
...
This diff is collapsed.
Click to expand it.
bob/learn/tensorflow/test/test_keras_tfrecord.py
0 → 100644
+
243
−
0
View file @
f7213a21
#!/usr/bin/env python
from
keras.models
import
Sequential
from
keras.engine
import
InputLayer
from
keras.layers
import
Dense
from
keras.layers
import
LSTM
from
keras.layers
import
Lambda
from
keras.layers
import
Flatten
from
keras.layers
import
Reshape
from
keras.datasets
import
mnist
from
keras.utils
import
np_utils
from
keras.utils.layer_utils
import
print_summary
import
os
import
copy
import
time
import
numpy
as
np
import
tensorflow
as
tf
from
tensorflow.python.ops
import
data_flow_ops
from
keras
import
backend
as
K
from
keras.models
import
Model
from
keras.layers
import
Dense
from
keras.layers
import
Dropout
from
keras.layers
import
Flatten
from
keras.layers
import
Input
from
keras.layers
import
Conv2D
from
keras.layers
import
MaxPooling2D
from
keras.callbacks
import
EarlyStopping
from
keras.callbacks
import
TensorBoard
from
keras.objectives
import
categorical_crossentropy
from
keras.utils
import
np_utils
from
keras.utils.generic_utils
import
Progbar
from
keras
import
callbacks
as
cbks
from
keras
import
optimizers
,
objectives
from
keras
import
metrics
as
metrics_module
if
K
.
backend
()
!=
'
tensorflow
'
:
raise
RuntimeError
(
'
This example can only run with the
'
'
TensorFlow backend for the time being,
'
'
because it requires TFRecords, which
'
'
are not supported on other platforms.
'
)
def
images_to_tfrecord
(
images
,
labels
,
filename
):
def
_int64_feature
(
value
):
return
tf
.
train
.
Feature
(
int64_list
=
tf
.
train
.
Int64List
(
value
=
[
value
]))
def
_bytes_feature
(
value
):
return
tf
.
train
.
Feature
(
bytes_list
=
tf
.
train
.
BytesList
(
value
=
[
value
]))
"""
Save data into TFRecord
"""
if
not
os
.
path
.
isfile
(
filename
):
num_examples
=
images
.
shape
[
0
]
rows
=
images
.
shape
[
1
]
cols
=
images
.
shape
[
2
]
depth
=
images
.
shape
[
3
]
print
(
'
Writing
'
,
filename
)
writer
=
tf
.
python_io
.
TFRecordWriter
(
filename
)
for
index
in
range
(
num_examples
):
image_raw
=
images
[
index
].
tostring
()
example
=
tf
.
train
.
Example
(
features
=
tf
.
train
.
Features
(
feature
=
{
'
height
'
:
_int64_feature
(
rows
),
'
width
'
:
_int64_feature
(
cols
),
'
depth
'
:
_int64_feature
(
depth
),
'
label
'
:
_int64_feature
(
int
(
labels
[
index
])),
'
image_raw
'
:
_bytes_feature
(
image_raw
)}))
writer
.
write
(
example
.
SerializeToString
())
writer
.
close
()
else
:
print
(
'
tfrecord %s already exists
'
%
filename
)
def
read_and_decode_recordinput
(
tf_glob
,
one_hot
=
True
,
classes
=
None
,
is_train
=
None
,
batch_shape
=
[
1000
,
28
,
28
,
1
],
parallelism
=
1
):
"""
Return tensor to read from TFRecord
"""
print
'
Creating graph for loading %s TFRecords...
'
%
tf_glob
with
tf
.
variable_scope
(
"
TFRecords
"
):
record_input
=
data_flow_ops
.
RecordInput
(
tf_glob
,
batch_size
=
batch_shape
[
0
],
parallelism
=
parallelism
)
records_op
=
record_input
.
get_yield_op
()
records_op
=
tf
.
split
(
records_op
,
batch_shape
[
0
],
0
)
records_op
=
[
tf
.
reshape
(
record
,
[])
for
record
in
records_op
]
progbar
=
Progbar
(
len
(
records_op
))
images
=
[]
labels
=
[]
for
i
,
serialized_example
in
enumerate
(
records_op
):
progbar
.
update
(
i
)
with
tf
.
variable_scope
(
"
parse_images
"
,
reuse
=
True
):
features
=
tf
.
parse_single_example
(
serialized_example
,
features
=
{
'
label
'
:
tf
.
FixedLenFeature
([],
tf
.
int64
),
'
image_raw
'
:
tf
.
FixedLenFeature
([],
tf
.
string
),
})
img
=
tf
.
decode_raw
(
features
[
'
image_raw
'
],
tf
.
uint8
)
img
.
set_shape
(
batch_shape
[
1
]
*
batch_shape
[
2
])
img
=
tf
.
reshape
(
img
,
[
1
]
+
batch_shape
[
1
:])
img
=
tf
.
cast
(
img
,
tf
.
float32
)
*
(
1.
/
255
)
-
0.5
label
=
tf
.
cast
(
features
[
'
label
'
],
tf
.
int32
)
if
one_hot
and
classes
:
label
=
tf
.
one_hot
(
label
,
classes
)
images
.
append
(
img
)
labels
.
append
(
label
)
images
=
tf
.
parallel_stack
(
images
,
0
)
labels
=
tf
.
parallel_stack
(
labels
,
0
)
images
=
tf
.
cast
(
images
,
tf
.
float32
)
images
=
tf
.
reshape
(
images
,
shape
=
batch_shape
)
# StagingArea will store tensors
# across multiple steps to
# speed up execution
images_shape
=
images
.
get_shape
()
labels_shape
=
labels
.
get_shape
()
copy_stage
=
data_flow_ops
.
StagingArea
(
[
tf
.
float32
,
tf
.
float32
],
shapes
=
[
images_shape
,
labels_shape
])
copy_stage_op
=
copy_stage
.
put
(
[
images
,
labels
])
staged_images
,
staged_labels
=
copy_stage
.
get
()
return
images
,
labels
def
save_mnist_as_tfrecord
():
(
X_train
,
y_train
),
(
X_test
,
y_test
)
=
mnist
.
load_data
()
X_train
=
X_train
[...,
np
.
newaxis
]
X_test
=
X_test
[...,
np
.
newaxis
]
images_to_tfrecord
(
images
=
X_train
,
labels
=
y_train
,
filename
=
'
train.mnist.tfrecord
'
)
images_to_tfrecord
(
images
=
X_test
,
labels
=
y_test
,
filename
=
'
test.mnist.tfrecord
'
)
def
lstm_layers
(
x_train_input
,
n_hidden
,
n_drop_first
,
n_new_steps
,
n_classes
):
x
=
LSTM
(
n_hidden
,
input_shape
=
(
28
,
28
),
return_sequences
=
True
)(
x_train_input
)
x
=
Lambda
(
lambda
k
:
k
[:,
n_drop_first
:,
:])(
x
)
x
=
Reshape
((
n_hidden
*
n_new_steps
,),
input_shape
=
(
n_new_steps
,
n_hidden
))(
x
)
x_train_out
=
Dense
(
n_classes
,
activation
=
"
softmax
"
,
name
=
'
x_train_out
'
)(
x
)
return
x_train_out
def
main
(
argv
=
None
):
sess
=
tf
.
Session
()
K
.
set_session
(
sess
)
save_mnist_as_tfrecord
()
n_epochs
=
2
n_hidden
=
32
# Inside the LSTM cell
n_drop_first
=
2
# Number of first output to drop after LSTM
classes
=
10
parallelism
=
10
batch_size
=
100
batch_shape
=
[
batch_size
,
28
,
28
,
1
]
x_train_batch
,
y_train_batch
=
read_and_decode_recordinput
(
'
train.mnist.tfrecord
'
,
one_hot
=
True
,
classes
=
classes
,
is_train
=
True
,
batch_shape
=
batch_shape
,
parallelism
=
parallelism
)
x_test_batch
,
y_test_batch
=
read_and_decode_recordinput
(
'
test.mnist.tfrecord
'
,
one_hot
=
True
,
classes
=
classes
,
is_train
=
True
,
batch_shape
=
batch_shape
,
parallelism
=
parallelism
)
x_batch_shape
=
x_train_batch
.
get_shape
().
as_list
()
y_batch_shape
=
y_train_batch
.
get_shape
().
as_list
()
print
(
"
Train data {}
"
.
format
(
x_batch_shape
))
print
(
"
Train labels {}
"
.
format
(
y_batch_shape
))
x_train_input
=
Input
(
tensor
=
x_train_batch
,
batch_shape
=
x_batch_shape
)
n_steps
=
batch_shape
[
0
]
n_new_steps
=
n_steps
-
n_drop_first
x_train_out
=
lstm_layers
(
x_train_input
,
n_hidden
,
n_drop_first
,
n_new_steps
,
classes
)
y_train_in_out
=
Input
(
tensor
=
y_train_batch
,
batch_shape
=
y_batch_shape
,
name
=
'
y_labels
'
)
cce
=
categorical_crossentropy
(
y_train_batch
,
x_train_out
)
# LSTM
model
=
Sequential
(
inputs
=
[
x_train_input
],
outputs
=
[
x_train_out
])
model
.
add_loss
(
cce
)
######################################################################
print_summary
(
model
)
model
.
compile
(
optimizer
=
"
adam
"
,
loss
=
"
categorical_crossentropy
"
,
metrics
=
[
"
accuracy
"
])
model
.
summary
()
tensorboard
=
TensorBoard
()
# tensorboard disabled due to Keras bug
model
.
fit
(
batch_size
=
batch_size
,
epochs
=
n_epochs
)
# callbacks=[tensorboard])
model
.
save_weights
(
'
saved_wt.h5
'
)
K
.
clear_session
()
# Second Session, pure Keras
(
X_train
,
y_train
),
(
X_test
,
y_test
)
=
mnist
.
load_data
()
X_train
=
X_train
[...,
np
.
newaxis
]
X_test
=
X_test
[...,
np
.
newaxis
]
x_test_inp
=
Input
(
batch_shape
=
(
None
,)
+
(
X_test
.
shape
[
1
:]))
test_out
=
lstm_layers
(
x_test_inp
,
n_hidden
,
n_drop_first
,
n_new_steps
,
classes
)
test_model
=
Model
(
inputs
=
x_test_inp
,
outputs
=
test_out
)
test_model
.
load_weights
(
'
saved_wt.h5
'
)
test_model
.
compile
(
optimizer
=
'
rmsprop
'
,
loss
=
'
categorical_crossentropy
'
,
metrics
=
[
'
accuracy
'
])
test_model
.
summary
()
loss
,
acc
=
test_model
.
evaluate
(
X_test
,
np_utils
.
to_categorical
(
y_test
),
classes
)
print
(
'
\n
Test accuracy: {0}
'
.
format
(
acc
))
# for layer in model.layers:
# print("{} {}".format(layer.name, model.get_layer(layer.name).output.shape))
if
__name__
==
'
__main__
'
:
main
()
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