Releases: tensorflow/tensorflow
TensorFlow 1.0.1
Bug Fixes and Other Changes
- Change GraphConstructor to not increase the version when importing, but instead take the min of all versions.
- Google Cloud Storage fixes.
- Removed
tf.core
andtf.python
modules from the API. These were never intended to be exposed. Please use the same objects through top-leveltf
module instead.
TensorFlow 1.0.0
Major Features and Improvements
- XLA (experimental): initial release of XLA, a domain-specific compiler for TensorFlow graphs, that targets CPUs and GPUs.
- TensorFlow Debugger (tfdbg): command-line interface and API.
- New python 3 docker images added.
- Made pip packages pypi compliant. TensorFlow can now be installed by
pip install tensorflow
command. - Several python API calls have been changed to resemble NumPy more closely.
- New (experimental) Java API.
- Android: new person detection + tracking demo implementing "Scalable Object Detection using Deep Neural Networks" (with additional YOLO object detector support)
- Android: new camera-based image stylization demo based on "A Learned Representation For Artistic Style"
Breaking Changes to the API
To help you upgrade your existing TensorFlow Python code to match the API changes below, we have prepared a conversion script.
- TensorFlow/models have been moved to a separate github repository.
- Division and modulus operators (/, //, %) now match Python (flooring)
semantics. This applies totf.div
andtf.mod
as well. To obtain forced
integer truncation based behaviors you can usetf.truncatediv
andtf.truncatemod
. tf.divide()
is now the recommended division function.tf.div()
will
remain, but its semantics do not respond to Python 3 orfrom future
mechanisms.- tf.reverse() now takes indices of axes to be reversed. E.g.
tf.reverse(a, [True, False, True])
must now be written as
tf.reverse(a, [0, 2])
.tf.reverse_v2()
will remain until 1.0 final. tf.mul
,tf.sub
andtf.neg
are deprecated in favor oftf.multiply
,
tf.subtract
andtf.negative
.tf.pack
andtf.unpack
are deprecated in favor oftf.stack
and
tf.unstack
.TensorArray.pack
andTensorArray.unpack
are getting deprecated in favor of
TensorArray.stack
andTensorArray.unstack
.- The following Python functions have had their arguments changed to use
axis
when referring to specific dimensions. We have kept the old keyword arguments
for compatibility currently, but we will be removing them well before the
final 1.0.tf.argmax
:dimension
becomesaxis
tf.argmin
:dimension
becomesaxis
tf.count_nonzero
:reduction_indices
becomesaxis
tf.expand_dims
:dim
becomesaxis
tf.reduce_all
:reduction_indices
becomesaxis
tf.reduce_any
:reduction_indices
becomesaxis
tf.reduce_join
:reduction_indices
becomesaxis
tf.reduce_logsumexp
:reduction_indices
becomesaxis
tf.reduce_max
:reduction_indices
becomesaxis
tf.reduce_mean
:reduction_indices
becomesaxis
tf.reduce_min
:reduction_indices
becomesaxis
tf.reduce_prod
:reduction_indices
becomesaxis
tf.reduce_sum
:reduction_indices
becomesaxis
tf.reverse_sequence
:batch_dim
becomesbatch_axis
,seq_dim
becomesseq_axis
tf.sparse_concat
:concat_dim
becomesaxis
tf.sparse_reduce_sum
:reduction_axes
becomesaxis
tf.sparse_reduce_sum_sparse
:reduction_axes
becomesaxis
tf.sparse_split
:split_dim
becomesaxis
tf.listdiff
has been renamed totf.setdiff1d
to match NumPy naming.tf.inv
has been renamed to betf.reciprocal
(component-wise reciprocal)
to avoid confusion withnp.inv
which is matrix inversion- tf.round now uses banker's rounding (round to even) semantics to match NumPy.
tf.split
now takes arguments in a reversed order and with different
keywords. In particular, we now match NumPy order as
tf.split(value, num_or_size_splits, axis)
.tf.sparse_split
now takes arguments in reversed order and with different
keywords. In particular we now match NumPy order as
tf.sparse_split(sp_input, num_split, axis)
. NOTE: we have temporarily
madetf.sparse_split
require keyword arguments.tf.concat
now takes arguments in reversed order and with different keywords. In particular we now match NumPy order astf.concat(values, axis, name)
.tf.image.decode_jpeg
by default uses the faster DCT method, sacrificing
a little fidelity for improved speed. One can revert to the old
behavior by specifying the attributedct_method='INTEGER_ACCURATE'
.tf.complex_abs
has been removed from the Python interface.tf.abs
supports complex tensors and should be used instead.- Template.
var_scope
property renamed to.variable_scope
- SyncReplicasOptimizer is removed and SyncReplicasOptimizerV2 renamed to SyncReplicasOptimizer.
tf.zeros_initializer()
andtf.ones_initializer()
now return a callable
that must be called with initializer arguments, in your code replace
tf.zeros_initializer
withtf.zeros_initializer()
.SparseTensor.shape
has been renamed toSparseTensor.dense_shape
. Same for
SparseTensorValue.shape
.- Replace tf.scalar_summary, tf.histogram_summary, tf.audio_summary, tf.image_summary with tf.summary.scalar, tf.summary.histogram, tf.summary.audio, tf.summary.image, respectively. The new summary ops take name rather than tag as their first argument, meaning summary ops now respect TensorFlow name scopes.
- Replace tf.train.SummaryWriter and tf.train.SummaryWriterCache with tf.summary.FileWriter and tf.summary.FileWriterCache.
- Removes RegisterShape from public API. Use C++ shape function registration
instead. - Deprecated
_ref
dtypes from the python API. - In the C++ API (in tensorflow/cc), Input, Output, etc. have moved
from the tensorflow::ops namespace to tensorflow. - Change arg order for
{softmax,sparse_softmax,sigmoid}_cross_entropy_with_logits
to be (labels, predictions), and force use of named args. - tf.nn.rnn_cell.* and most functions in tf.nn.rnn.* (with the exception of dynamic_rnn and raw_rnn) are temporarily in tf.contrib.rnn. They will be moved back into core for TF 1.1.
Bug Fixes and Other Changes
- Numerous C++ API updates.
- New op:
parallel_stack
. - Introducing common tf io compression options constants for
RecordReader/RecordWriter. - Add
sparse_column_with_vocabulary_file
, to specify a feature column that
transform string features to IDs, where the mapping is defined by a vocabulary
file. - Added
index_to_string_table
which returns a lookup table that maps indices to
strings. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Add a
ParallelForWithWorkerId
function. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Support restore session from checkpoint files in v2 in
contrib/session_bundle
. - Added a tf.contrib.image.rotate function for arbitrary angles.
- Added
tf.contrib.framework.filter_variables
as a convenience function to
filter lists of variables based on regular expressions. make_template()
takes an optionalcustom_getter_ param
.- Added comment about how existing directories are handled by
recursive_create_dir
. - Added an op for QR factorizations.
- Divides and mods in Python API now use flooring (Python) semantics.
- Android: pre-built libs are now built nightly.
- Android: cmake/gradle build for TensorFlow Inference library under
contrib/android/cmake
- Android: Much more robust Session initialization code.
- Android: TF stats now exposed directly in demo and log when debug mode is
active - Android: new/better README.md documentation
- saved_model is available as
tf.saved_model
. - Empty op is now stateful.
- Improve speed of scatter_update on the cpu for ASSIGN operations.
- Change
reduce_join
to treatreduction_indices
in the same way as otherreduce_
ops. - Move
TensorForestEstimator
tocontrib/tensor_forest
. - Enable compiler optimizations by default and allow configuration in configure.
tf.divide
now honors the name field.- Make metrics weight broadcasting more strict.
- Add new queue-like
StagingArea
and new ops:stage
andunstage
. - Enable inplace update ops for strings on CPU. Speed up string concat.
Thanks to our Contributors
This release contains contributions from many people at Google, as well as:
Aaron Hu, Abhishek Aggarwal, Adam Michael, Adriano Carmezim, @AfirSraftGarrier,
Alexander Novikov, Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Hundt,
Anish Shah, Anton Loss, @b0noI, @BoyuanJiang, Carl Thomé, Chad Kennedy, Comic
Chang, Connor Braa, Daniel N. Lang, Daniel Trebbien,
@danielgordon10, Darcy Liu, Darren Garvey, Dmitri Lapin, Eron Wright, Evan
Cofer, Fabrizio Milo, Finbarr Timbers, Franck Dernoncourt, Garrett Smith,
@guschmue, Hao Wei, Henrik Holst, Huazuo Gao, @ian, @issac, Jacob Israel,
Jangsoo Park, Jin Kim, Jingtian Peng, John Pope, Kye Bostelmann, Liangliang He,
Ling Zhang, Luheng He, Luke Iwanski, @lvli, Michael Basilyan, Mihir Patel,
Mikalai Drabovich, Morten Just, @newge, Nick Butlin, Nishant Shukla,
Pengfei Ni, Przemyslaw Tredak, @rasbt, @ronny, Rudolf Rosa, @RustingSword,
Sam Abrahams, Sam Putnam, @seongahjo, Shi Jiaxin, @skavulya, Steffen MüLler,
@TheUSER123, @tiriplicamihai, @vhasanov, Victor Costan, Vit Stepanovs,
Wangda Tan, Wenjian Huang, Xingdong Zuo, Yaroslav Bulatov, Yota Toyama,
Yuan (Terry) Tang, Yuxin Wu
We are also grateful to all who filed issues or helped resolve them, asked and
answered questions, and were part of inspiring discussions.
TensorFlow 1.0.0-rc2
Major Features and Improvements
- XLA (experimental): initial release of XLA, a domain-specific compiler for TensorFlow graphs, that targets CPUs and GPUs.
- TensorFlow Debugger (tfdbg): command-line interface and API.
- New python 3 docker images added.
- Made pip packages pypi compliant. TensorFlow can now be installed by
pip install tensorflow
command. - Several python API calls have been changed to resemble NumPy more closely.
- New (experimental) Java API.
- Android: new person detection + tracking demo implementing "Scalable Object Detection using Deep Neural Networks" (with additional YOLO object detector support)
- Android: new camera-based image stylization demo based on "A Learned Representation For Artistic Style"
Breaking Changes to the API
To help you upgrade your existing TensorFlow Python code to match the API changes below, we have prepared a conversion script.
- TensorFlow/models have been moved to a separate github repository.
- Division and modulus operators (/, //, %) now match Python (flooring)
semantics. This applies totf.div
andtf.mod
as well. To obtain forced
integer truncation based behaviors you can usetf.truncatediv
andtf.truncatemod
. tf.divide()
is now the recommended division function.tf.div()
will
remain, but its semantics do not respond to Python 3 orfrom future
mechanisms.- tf.reverse() now takes indices of axes to be reversed. E.g.
tf.reverse(a, [True, False, True])
must now be written as
tf.reverse(a, [0, 2])
.tf.reverse_v2()
will remain until 1.0 final. tf.mul
,tf.sub
andtf.neg
are deprecated in favor oftf.multiply
,
tf.subtract
andtf.negative
.tf.pack
andtf.unpack
are deprecated in favor oftf.stack
and
tf.unstack
.TensorArray.pack
andTensorArray.unpack
are getting deprecated in favor of
TensorArray.stack
andTensorArray.unstack
.- The following Python functions have had their arguments changed to use
axis
when referring to specific dimensions. We have kept the old keyword arguments
for compatibility currently, but we will be removing them well before the
final 1.0.tf.argmax
:dimension
becomesaxis
tf.argmin
:dimension
becomesaxis
tf.count_nonzero
:reduction_indices
becomesaxis
tf.expand_dims
:dim
becomesaxis
tf.reduce_all
:reduction_indices
becomesaxis
tf.reduce_any
:reduction_indices
becomesaxis
tf.reduce_join
:reduction_indices
becomesaxis
tf.reduce_logsumexp
:reduction_indices
becomesaxis
tf.reduce_max
:reduction_indices
becomesaxis
tf.reduce_mean
:reduction_indices
becomesaxis
tf.reduce_min
:reduction_indices
becomesaxis
tf.reduce_prod
:reduction_indices
becomesaxis
tf.reduce_sum
:reduction_indices
becomesaxis
tf.reverse_sequence
:batch_dim
becomesbatch_axis
,seq_dim
becomesseq_axis
tf.sparse_concat
:concat_dim
becomesaxis
tf.sparse_reduce_sum
:reduction_axes
becomesaxis
tf.sparse_reduce_sum_sparse
:reduction_axes
becomesaxis
tf.sparse_split
:split_dim
becomesaxis
tf.listdiff
has been renamed totf.setdiff1d
to match NumPy naming.tf.inv
has been renamed to betf.reciprocal
(component-wise reciprocal)
to avoid confusion withnp.inv
which is matrix inversion- tf.round now uses banker's rounding (round to even) semantics to match NumPy.
tf.split
now takes arguments in a reversed order and with different
keywords. In particular, we now match NumPy order as
tf.split(value, num_or_size_splits, axis)
.tf.sparse_split
now takes arguments in reversed order and with different
keywords. In particular we now match NumPy order as
tf.sparse_split(sp_input, num_split, axis)
. NOTE: we have temporarily
madetf.sparse_split
require keyword arguments.tf.concat
now takes arguments in reversed order and with different keywords. In particular we now match NumPy order astf.concat(values, axis, name)
.tf.image.decode_jpeg
by default uses the faster DCT method, sacrificing
a little fidelity for improved speed. One can revert to the old
behavior by specifying the attributedct_method='INTEGER_ACCURATE'
.tf.complex_abs
has been removed from the Python interface.tf.abs
supports complex tensors and should be used instead.- Template.
var_scope
property renamed to.variable_scope
- SyncReplicasOptimizer is removed and SyncReplicasOptimizerV2 renamed to SyncReplicasOptimizer.
tf.zeros_initializer()
andtf.ones_initializer()
now return a callable
that must be called with initializer arguments, in your code replace
tf.zeros_initializer
withtf.zeros_initializer()
.SparseTensor.shape
has been renamed toSparseTensor.dense_shape
. Same for
SparseTensorValue.shape
.- Replace tf.scalar_summary, tf.histogram_summary, tf.audio_summary, tf.image_summary with tf.summary.scalar, tf.summary.histogram, tf.summary.audio, tf.summary.image, respectively. The new summary ops take name rather than tag as their first argument, meaning summary ops now respect TensorFlow name scopes.
- Replace tf.train.SummaryWriter and tf.train.SummaryWriterCache with tf.summary.FileWriter and tf.summary.FileWriterCache.
- Removes RegisterShape from public API. Use C++ shape function registration
instead. - Deprecated
_ref
dtypes from the python API. - In the C++ API (in tensorflow/cc), Input, Output, etc. have moved
from the tensorflow::ops namespace to tensorflow. - Change arg order for
{softmax,sparse_softmax,sigmoid}_cross_entropy_with_logits
to be (labels, predictions), and force use of named args.
Bug Fixes and Other Changes
- New op:
parallel_stack
. - Introducing common tf io compression options constants for
RecordReader/RecordWriter. - Add
sparse_column_with_vocabulary_file
, to specify a feature column that
transform string features to IDs, where the mapping is defined by a vocabulary
file. - Added
index_to_string_table
which returns a lookup table that maps indices to
strings. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Add a
ParallelForWithWorkerId
function. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Support restore session from checkpoint files in v2 in
contrib/session_bundle
. - Added a tf.contrib.image.rotate function for arbitrary angles.
- Added
tf.contrib.framework.filter_variables
as a convenience function to
filter lists of variables based on regular expressions. make_template()
takes an optionalcustom_getter_ param
.- Added comment about how existing directories are handled by
recursive_create_dir
. - Added an op for QR factorizations.
- Divides and mods in Python API now use flooring (Python) semantics.
- Android: pre-built libs are now built nightly.
- Android: cmake/gradle build for TensorFlow Inference library under
contrib/android/cmake
- Android: Much more robust Session initialization code.
- Android: TF stats now exposed directly in demo and log when debug mode is
active - Android: new/better README.md documentation
- saved_model is available as
tf.saved_model
. - Empty op is now stateful.
- Improve speed of scatter_update on the cpu for ASSIGN operations.
- Change
reduce_join
to treatreduction_indices
in the same way as otherreduce_
ops. - Move
TensorForestEstimator
tocontrib/tensor_forest
. - Enable compiler optimizations by default and allow configuration in configure.
tf.divide
now honors the name field.- Make metrics weight broadcasting more strict.
- Add new queue-like
StagingArea
and new ops:stage
andunstage
.
Thanks to our Contributors
This release contains contributions from many people at Google, as well as:
Aaron Hu, Abhishek Aggarwal, Adam Michael, Adriano Carmezim, @AfirSraftGarrier,
Alexander Novikov, Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Hundt,
Anish Shah, Anton Loss, @b0noI, @BoyuanJiang, Carl Thomé, Chad Kennedy, Comic
Chang, Connor Braa, Daniel N. Lang, Daniel Trebbien,
@danielgordon10, Darcy Liu, Darren Garvey, Dmitri Lapin, Eron Wright, Evan
Cofer, Fabrizio Milo, Finbarr Timbers, Franck Dernoncourt, Garrett Smith,
@guschmue, Hao Wei, Henrik Holst, Huazuo Gao, @ian, @issac, Jacob Israel,
Jangsoo Park, Jin Kim, Jingtian Peng, John Pope, Kye Bostelmann, Liangliang He,
Ling Zhang, Luheng He, Luke Iwanski, @lvli, Michael Basilyan, Mihir Patel,
Mikalai Drabovich, Morten Just, @newge, Nick Butlin, Nishant Shukla,
Pengfei Ni, Przemyslaw Tredak, @rasbt, @ronny, Rudolf Rosa, @RustingSword,
Sam Abrahams, Sam Putnam, @seongahjo, Shi Jiaxin, @skavulya, Steffen MüLler,
@TheUSER123, @tiriplicamihai, @vhasanov, Victor Costan, Vit Stepanovs,
Wangda Tan, Wenjian Huang, Xingdong Zuo, Yaroslav Bulatov, Yota Toyama,
Yuan (Terry) Tang, Yuxin Wu
We are also grateful to all who filed issues or helped resolve them, asked and
answered questions, and were part of inspiring discussions.
TensorFlow 1.0.0-rc1
Major Features and Improvements
- XLA (experimental): initial release of XLA, a domain-specific compiler for TensorFlow graphs, that targets CPUs and GPUs.
- TensorFlow Debugger (tfdbg): command-line interface and API.
- New python 3 docker images added.
- Made pip packages pypi compliant. TensorFlow can now be installed by
pip install tensorflow
command. - Several python API calls have been changed to resemble NumPy more closely.
- New (experimental) Java API.
- Android: new person detection + tracking demo implementing "Scalable Object Detection using Deep Neural Networks" (with additional YOLO object detector support)
- Android: new camera-based image stylization demo based on "A Learned Representation For Artistic Style"
Breaking Changes to the API
To help you upgrade your existing TensorFlow Python code to match the API changes below, we have prepared a conversion script.
- TensorFlow/models have been moved to a separate github repository.
- Division and modulus operators (/, //, %) now match Python (flooring)
semantics. This applies totf.div
andtf.mod
as well. To obtain forced
integer truncation based behaviors you can usetf.truncatediv
andtf.truncatemod
. tf.divide()
is now the recommended division function.tf.div()
will
remain, but its semantics do not respond to Python 3 orfrom future
mechanisms.- tf.reverse() now takes indices of axes to be reversed. E.g.
tf.reverse(a, [True, False, True])
must now be written as
tf.reverse(a, [0, 2])
.tf.reverse_v2()
will remain until 1.0 final. tf.mul
,tf.sub
andtf.neg
are deprecated in favor oftf.multiply
,
tf.subtract
andtf.negative
.tf.pack
andtf.unpack
are deprecated in favor oftf.stack
and
tf.unstack
.TensorArray.pack
andTensorArray.unpack
are getting deprecated in favor of
TensorArray.stack
andTensorArray.unstack
.- The following Python functions have had their arguments changed to use
axis
when referring to specific dimensions. We have kept the old keyword arguments
for compatibility currently, but we will be removing them well before the
final 1.0.tf.argmax
:dimension
becomesaxis
tf.argmin
:dimension
becomesaxis
tf.count_nonzero
:reduction_indices
becomesaxis
tf.expand_dims
:dim
becomesaxis
tf.reduce_all
:reduction_indices
becomesaxis
tf.reduce_any
:reduction_indices
becomesaxis
tf.reduce_join
:reduction_indices
becomesaxis
tf.reduce_logsumexp
:reduction_indices
becomesaxis
tf.reduce_max
:reduction_indices
becomesaxis
tf.reduce_mean
:reduction_indices
becomesaxis
tf.reduce_min
:reduction_indices
becomesaxis
tf.reduce_prod
:reduction_indices
becomesaxis
tf.reduce_sum
:reduction_indices
becomesaxis
tf.reverse_sequence
:batch_dim
becomesbatch_axis
,seq_dim
becomesseq_axis
tf.sparse_concat
:concat_dim
becomesaxis
tf.sparse_reduce_sum
:reduction_axes
becomesaxis
tf.sparse_reduce_sum_sparse
:reduction_axes
becomesaxis
tf.sparse_split
:split_dim
becomesaxis
tf.listdiff
has been renamed totf.setdiff1d
to match NumPy naming.tf.inv
has been renamed to betf.reciprocal
(component-wise reciprocal)
to avoid confusion withnp.inv
which is matrix inversion- tf.round now uses banker's rounding (round to even) semantics to match NumPy.
tf.split
now takes arguments in a reversed order and with different
keywords. In particular, we now match NumPy order as
tf.split(value, num_or_size_splits, axis)
.tf.sparse_split
now takes arguments in reversed order and with different
keywords. In particular we now match NumPy order as
tf.sparse_split(sp_input, num_split, axis)
. NOTE: we have temporarily
madetf.sparse_split
require keyword arguments.tf.concat
now takes arguments in reversed order and with different keywords. In particular we now match NumPy order astf.concat(values, axis, name)
.tf.image.decode_jpeg
by default uses the faster DCT method, sacrificing
a little fidelity for improved speed. One can revert to the old
behavior by specifying the attributedct_method='INTEGER_ACCURATE'
.tf.complex_abs
has been removed from the Python interface.tf.abs
supports complex tensors and should be used instead.- Template.
var_scope
property renamed to.variable_scope
- SyncReplicasOptimizer is removed and SyncReplicasOptimizerV2 renamed to SyncReplicasOptimizer.
tf.zeros_initializer()
andtf.ones_initializer()
now return a callable
that must be called with initializer arguments, in your code replace
tf.zeros_initializer
withtf.zeros_initializer()
.SparseTensor.shape
has been renamed toSparseTensor.dense_shape
. Same for
SparseTensorValue.shape
.- Replace tf.scalar_summary, tf.histogram_summary, tf.audio_summary, tf.image_summary with tf.summary.scalar, tf.summary.histogram, tf.summary.audio, tf.summary.image, respectively. The new summary ops take name rather than tag as their first argument, meaning summary ops now respect TensorFlow name scopes.
- Replace tf.train.SummaryWriter and tf.train.SummaryWriterCache with tf.summary.FileWriter and tf.summary.FileWriterCache.
- Removes RegisterShape from public API. Use C++ shape function registration
instead. - Deprecated
_ref
dtypes from the python API. - In the C++ API (in tensorflow/cc), Input, Output, etc. have moved
from the tensorflow::ops namespace to tensorflow. - Change arg order for
{softmax,sparse_softmax,sigmoid}_cross_entropy_with_logits
to be (labels, predictions), and force use of named args.
Bug Fixes and Other Changes
- New op:
parallel_stack
. - Introducing common tf io compression options constants for
RecordReader/RecordWriter. - Add
sparse_column_with_vocabulary_file
, to specify a feature column that
transform string features to IDs, where the mapping is defined by a vocabulary
file. - Added
index_to_string_table
which returns a lookup table that maps indices to
strings. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Add a
ParallelForWithWorkerId
function. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Support restore session from checkpoint files in v2 in
contrib/session_bundle
. - Added a tf.contrib.image.rotate function for arbitrary angles.
- Added
tf.contrib.framework.filter_variables
as a convenience function to
filter lists of variables based on regular expressions. make_template()
takes an optionalcustom_getter_ param
.- Added comment about how existing directories are handled by
recursive_create_dir
. - Added an op for QR factorizations.
- Divides and mods in Python API now use flooring (Python) semantics.
- Android: pre-built libs are now built nightly.
- Android: cmake/gradle build for TensorFlow Inference library under
contrib/android/cmake
- Android: Much more robust Session initialization code.
- Android: TF stats now exposed directly in demo and log when debug mode is
active - Android: new/better README.md documentation
- saved_model is available as
tf.saved_model
. - Empty op is now stateful.
- Improve speed of scatter_update on the cpu for ASSIGN operations.
- Change
reduce_join
to treatreduction_indices
in the same way as otherreduce_
ops. - Move
TensorForestEstimator
tocontrib/tensor_forest
. - Enable compiler optimizations by default and allow configuration in configure.
tf.divide
now honors the name field.- Make metrics weight broadcasting more strict.
- Add new queue-like
StagingArea
and new ops:stage
andunstage
.
Thanks to our Contributors
This release contains contributions from many people at Google, as well as:
Aaron Hu, Abhishek Aggarwal, Adam Michael, Adriano Carmezim, @AfirSraftGarrier,
Alexander Novikov, Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Hundt,
Anish Shah, Anton Loss, @b0noI, @BoyuanJiang, Carl Thomé, Chad Kennedy, Comic
Chang, Connor Braa, Daniel N. Lang, Daniel Trebbien,
@danielgordon10, Darcy Liu, Darren Garvey, Dmitri Lapin, Eron Wright, Evan
Cofer, Fabrizio Milo, Finbarr Timbers, Franck Dernoncourt, Garrett Smith,
@guschmue, Hao Wei, Henrik Holst, Huazuo Gao, @ian, @issac, Jacob Israel,
Jangsoo Park, Jin Kim, Jingtian Peng, John Pope, Kye Bostelmann, Liangliang He,
Ling Zhang, Luheng He, Luke Iwanski, @lvli, Michael Basilyan, Mihir Patel,
Mikalai Drabovich, Morten Just, @newge, Nick Butlin, Nishant Shukla,
Pengfei Ni, Przemyslaw Tredak, @rasbt, @ronny, Rudolf Rosa, @RustingSword,
Sam Abrahams, Sam Putnam, @seongahjo, Shi Jiaxin, @skavulya, Steffen MüLler,
@TheUSER123, @tiriplicamihai, @vhasanov, Victor Costan, Vit Stepanovs,
Wangda Tan, Wenjian Huang, Xingdong Zuo, Yaroslav Bulatov, Yota Toyama,
Yuan (Terry) Tang, Yuxin Wu
We are also grateful to all who filed issues or helped resolve them, asked and
answered questions, and were part of inspiring discussions.
TensorFlow 1.0.0-rc0
Major Features and Improvements
- XLA (experimental): initial release of XLA, a domain-specific compiler for TensorFlow graphs, that targets CPUs and GPUs.
- TensorFlow Debugger (tfdbg): command-line interface and API.
- New python 3 docker images added.
- Made pip packages pypi compliant. TensorFlow can now be installed by
pip install tensorflow
command. - Several python API calls have been changed to resemble NumPy more closely.
- New (experimental) Java API.
- Android: new person detection + tracking demo implementing "Scalable Object Detection using Deep Neural Networks" (with additional YOLO object detector support)
- Android: new camera-based image stylization demo based on "A Learned Representation For Artistic Style"
Breaking Changes to the API
To help you upgrade your existing TensorFlow Python code to match the API changes below, we have prepared a conversion script.
- TensorFlow/models have been moved to a separate github repository.
- Division and modulus operators (/, //, %) now match Python (flooring)
semantics. This applies totf.div
andtf.mod
as well. To obtain forced
integer truncation based behaviors you can usetf.truncatediv
andtf.truncatemod
. tf.divide()
is now the recommended division function.tf.div()
will
remain, but its semantics do not respond to Python 3 orfrom future
mechanisms.- tf.reverse() now takes indices of axes to be reversed. E.g.
tf.reverse(a, [True, False, True])
must now be written as
tf.reverse(a, [0, 2])
.tf.reverse_v2()
will remain until 1.0 final. tf.mul
,tf.sub
andtf.neg
are deprecated in favor oftf.multiply
,
tf.subtract
andtf.negative
.tf.pack
andtf.unpack
are deprecated in favor oftf.stack
and
tf.unstack
.TensorArray.pack
andTensorArray.unpack
are getting deprecated in favor of
TensorArray.stack
andTensorArray.unstack
.- The following Python functions have had their arguments changed to use
axis
when referring to specific dimensions. We have kept the old keyword arguments
for compatibility currently, but we will be removing them well before the
final 1.0.tf.argmax
:dimension
becomesaxis
tf.argmin
:dimension
becomesaxis
tf.count_nonzero
:reduction_indices
becomesaxis
tf.expand_dims
:dim
becomesaxis
tf.reduce_all
:reduction_indices
becomesaxis
tf.reduce_any
:reduction_indices
becomesaxis
tf.reduce_join
:reduction_indices
becomesaxis
tf.reduce_logsumexp
:reduction_indices
becomesaxis
tf.reduce_max
:reduction_indices
becomesaxis
tf.reduce_mean
:reduction_indices
becomesaxis
tf.reduce_min
:reduction_indices
becomesaxis
tf.reduce_prod
:reduction_indices
becomesaxis
tf.reduce_sum
:reduction_indices
becomesaxis
tf.reverse_sequence
:batch_dim
becomesbatch_axis
,seq_dim
becomesseq_axis
tf.sparse_concat
:concat_dim
becomesaxis
tf.sparse_reduce_sum
:reduction_axes
becomesaxis
tf.sparse_reduce_sum_sparse
:reduction_axes
becomesaxis
tf.sparse_split
:split_dim
becomesaxis
tf.listdiff
has been renamed totf.setdiff1d
to match NumPy naming.tf.inv
has been renamed to betf.reciprocal
(component-wise reciprocal)
to avoid confusion withnp.inv
which is matrix inversion- tf.round now uses banker's rounding (round to even) semantics to match NumPy.
tf.split
now takes arguments in a reversed order and with different
keywords. In particular, we now match NumPy order as
tf.split(value, num_or_size_splits, axis)
.tf.sparse_split
now takes arguments in reversed order and with different
keywords. In particular we now match NumPy order as
tf.sparse_split(sp_input, num_split, axis)
. NOTE: we have temporarily
madetf.sparse_split
require keyword arguments.tf.concat
now takes arguments in reversed order and with different keywords. In particular we now match NumPy order astf.concat(values, axis, name)
.tf.image.decode_jpeg
by default uses the faster DCT method, sacrificing
a little fidelity for improved speed. One can revert to the old
behavior by specifying the attributedct_method='INTEGER_ACCURATE'
.tf.complex_abs
has been removed from the Python interface.tf.abs
supports complex tensors and should be used instead.- Template.
var_scope
property renamed to.variable_scope
- SyncReplicasOptimizer is removed and SyncReplicasOptimizerV2 renamed to SyncReplicasOptimizer.
tf.zeros_initializer()
andtf.ones_initializer()
now return a callable
that must be called with initializer arguments, in your code replace
tf.zeros_initializer
withtf.zeros_initializer()
.SparseTensor.shape
has been renamed toSparseTensor.dense_shape
. Same for
SparseTensorValue.shape
.- Replace tf.scalar_summary, tf.histogram_summary, tf.audio_summary, tf.image_summary with tf.summary.scalar, tf.summary.histogram, tf.summary.audio, tf.summary.image, respectively. The new summary ops take name rather than tag as their first argument, meaning summary ops now respect TensorFlow name scopes.
- Replace tf.train.SummaryWriter and tf.train.SummaryWriterCache with tf.summary.FileWriter and tf.summary.FileWriterCache.
- Removes RegisterShape from public API. Use C++ shape function registration
instead. - Deprecated
_ref
dtypes from the python API. - In the C++ API (in tensorflow/cc), Input, Output, etc. have moved
from the tensorflow::ops namespace to tensorflow. - Change arg order for
{softmax,sparse_softmax,sigmoid}_cross_entropy_with_logits
to be (labels, predictions), and force use of named args.
Bug Fixes and Other Changes
- New op:
parallel_stack
. - Introducing common tf io compression options constants for
RecordReader/RecordWriter. - Add
sparse_column_with_vocabulary_file
, to specify a feature column that
transform string features to IDs, where the mapping is defined by a vocabulary
file. - Added
index_to_string_table
which returns a lookup table that maps indices to
strings. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Add a
ParallelForWithWorkerId
function. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Support restore session from checkpoint files in v2 in
contrib/session_bundle
. - Added a tf.contrib.image.rotate function for arbitrary angles.
- Added
tf.contrib.framework.filter_variables
as a convenience function to
filter lists of variables based on regular expressions. make_template()
takes an optionalcustom_getter_ param
.- Added comment about how existing directories are handled by
recursive_create_dir
. - Added an op for QR factorizations.
- Divides and mods in Python API now use flooring (Python) semantics.
- Android: pre-built libs are now built nightly.
- Android: cmake/gradle build for TensorFlow Inference library under
contrib/android/cmake
- Android: Much more robust Session initialization code.
- Android: TF stats now exposed directly in demo and log when debug mode is
active - Android: new/better README.md documentation
- saved_model is available as
tf.saved_model
. - Empty op is now stateful.
- Improve speed of scatter_update on the cpu for ASSIGN operations.
- Change
reduce_join
to treatreduction_indices
in the same way as otherreduce_
ops. - Move
TensorForestEstimator
tocontrib/tensor_forest
. - Enable compiler optimizations by default and allow configuration in configure.
tf.divide
now honors the name field.- Make metrics weight broadcasting more strict.
- Add new queue-like
StagingArea
and new ops:stage
andunstage
.
Thanks to our Contributors
This release contains contributions from many people at Google, as well as:
Aaron Hu, Abhishek Aggarwal, Adam Michael, Adriano Carmezim, @AfirSraftGarrier,
Alexander Novikov, Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Hundt,
Anish Shah, Anton Loss, @b0noI, @BoyuanJiang, Carl Thomé, Chad Kennedy, Comic
Chang, Connor Braa, Daniel N. Lang, Daniel Trebbien,
@danielgordon10, Darcy Liu, Darren Garvey, Dmitri Lapin, Eron Wright, Evan
Cofer, Fabrizio Milo, Finbarr Timbers, Franck Dernoncourt, Garrett Smith,
@guschmue, Hao Wei, Henrik Holst, Huazuo Gao, @ian, @issac, Jacob Israel,
Jangsoo Park, Jin Kim, Jingtian Peng, John Pope, Kye Bostelmann, Liangliang He,
Ling Zhang, Luheng He, Luke Iwanski, @lvli, Michael Basilyan, Mihir Patel,
Mikalai Drabovich, Morten Just, @newge, Nick Butlin, Nishant Shukla,
Pengfei Ni, Przemyslaw Tredak, @rasbt, @ronny, Rudolf Rosa, @RustingSword,
Sam Abrahams, Sam Putnam, @seongahjo, Shi Jiaxin, @skavulya, Steffen MüLler,
@TheUSER123, @tiriplicamihai, @vhasanov, Victor Costan, Vit Stepanovs,
Wangda Tan, Wenjian Huang, Xingdong Zuo, Yaroslav Bulatov, Yota Toyama,
Yuan (Terry) Tang, Yuxin Wu
We are also grateful to all who filed issues or helped resolve them, asked and
answered questions, and were part of inspiring discussions.
TensorFlow 1.0.0-alpha
Major Features and Improvements
- TensorFlow Debugger (tfdbg): command-line interface and API.
- New python 3 docker images added.
- Made pip packages pypi compliant. TensorFlow can now be installed by
pip install tensorflow
command. - Android: person detection + tracking demo implementing Scalable Object
Detection using Deep Neural Networks. - Android: pre-built libs are now built nightly.
- New (experimental) Java API.
Breaking Changes to the API
- TensorFlow/models have been moved to a separate github repository.
- Division and modulus operators (/, //, %) now match Python (flooring)
semantics. This applies totf.div
andtf.mod
as well. To obtain forced
integer truncation based behaviors you can usetf.truncatediv
andtf.truncatemod
. tf.divide()
is now the recommended division function.tf.div()
will
remain, but its semantics do not respond to Python 3 orfrom future
mechanisms.- tf.reverse() now takes indices of axes to be reversed. E.g.
tf.reverse(a, [True, False, True])
must now be written as
tf.reverse(a, [0, 2])
.tf.reverse_v2()
will remain until 1.0 final. tf.mul
,tf.sub
andtf.neg
are deprecated in favor oftf.multiply
,
tf.subtract
andtf.negative
.tf.pack
andtf.unpack
are deprecated in favor oftf.stack
and
tf.unstack
.TensorArray.pack
andTensorArray.unpack
are getting deprecated in favor of
TensorArray.stack
andTensorArray.unstack
.- The following Python functions have had their arguments changed to use
axis
when referring to specific dimensions. We have kept the old keyword arguments
for compatibility currently, but we will be removing them well before the
final 1.0.tf.argmax
:dimension
becomesaxis
tf.argmin
:dimension
becomesaxis
tf.count_nonzero
:reduction_indices
becomesaxis
tf.expand_dims
:dim
becomesaxis
tf.reduce_all
:reduction_indices
becomesaxis
tf.reduce_any
:reduction_indices
becomesaxis
tf.reduce_join
:reduction_indices
becomesaxis
tf.reduce_logsumexp
:reduction_indices
becomesaxis
tf.reduce_max
:reduction_indices
becomesaxis
tf.reduce_mean
:reduction_indices
becomesaxis
tf.reduce_min
:reduction_indices
becomesaxis
tf.reduce_prod
:reduction_indices
becomesaxis
tf.reduce_sum
:reduction_indices
becomesaxis
tf.reverse_sequence
:batch_dim
becomesbatch_axis
,seq_dim
becomesseq_axis
tf.sparse_concat
:concat_dim
becomesaxis
tf.sparse_reduce_sum
:reduction_axes
becomesaxis
tf.sparse_reduce_sum_sparse
:reduction_axes
becomesaxis
tf.sparse_split
:split_dim
becomesaxis
tf.listdiff
has been renamed totf.setdiff1d
to match NumPy naming.tf.inv
has been renamed to betf.reciprocal
(component-wise reciprocal)
to avoid confusion withnp.inv
which is matrix inversion- tf.round now uses banker's rounding (round to even) semantics to match NumPy.
tf.split
now takes arguments in a reversed order and with different
keywords. In particular, we now match NumPy order as
tf.split(value, num_or_size_splits, axis)
.tf.sparse_split
now takes arguments in reversed order and with different
keywords. In particular we now match NumPy order as
tf.sparse_split(sp_input, num_split, axis)
. NOTE: we have temporarily
madetf.sparse_split
require keyword arguments.- Deprecated
tf.concat
operator. Please switch to usetf.concat_v2
for now.
In the Beta release, we will updatetf.concat
to match argument order of
tf.concat_v2
. tf.image.decode_jpeg
by default uses the faster DCT method, sacrificing
a little fidelity for improved speed. One can revert to the old
behavior by specifying the attributedct_method='INTEGER_ACCURATE'
.tf.complex_abs
has been removed from the Python interface.tf.abs
supports complex tensors and should be used instead.- Template.
var_scope
property renamed to.variable_scope
- SyncReplicasOptimizer is removed and SyncReplicasOptimizerV2 renamed to SyncReplicasOptimizer.
tf.zeros_initializer()
andtf.ones_initializer()
now return a callable
that must be called with initializer arguments, in your code replace
tf.zeros_initializer
withtf.zeros_initializer()
.SparseTensor.shape
has been renamed toSparseTensor.dense_shape
. Same for
SparseTensorValue.shape
.- Remove old tf summary ops, like
tf.scalar_summary
andtf.histogram_summary
.
Usetf.summary.scalar
andtf.summary.histogram
instead. - Remove tf.train.SummaryWriter and tf.train.SummaryWriterCache.
- Removes RegisterShape from public API. Use C++ shape function registration
instead. - Deprecated
_ref
dtypes from the python API.
Bug Fixes and Other Changes
- New op:
parallel_stack
. - Introducing common tf io compression options constants for
RecordReader/RecordWriter. - Add
sparse_column_with_vocabulary_file
, to specify a feature column that
transform string features to IDs, where the mapping is defined by a vocabulary
file. - Added
index_to_string_table
which returns a lookup table that maps indices to
strings. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Add a
ParallelForWithWorkerId
function. - Add
string_to_index_table
, which returns a lookup table that matches strings
to indices. - Support restore session from checkpoint files in v2 in
contrib/session_bundle
. - Added a tf.contrib.image.rotate function for arbitrary angles.
- Added
tf.contrib.framework.filter_variables
as a convenience function to
filter lists of variables based on regular expressions. - Remove old tf summary ops, like
tf.scalar_summary
andtf.histogram_summary
.
Usetf.summary.scalar
andtf.summary.histogram
instead. make_template()
takes an optionalcustom_getter_ param
.- Added comment about how existing directories are handled by
recursive_create_dir
. - Added an op for QR factorizations.
- Divides and mods in Python API now use flooring (Python) semantics.
- Android: cmake/gradle build for TensorFlow Inference library under
contrib/android/cmake
- Android: Much more robust Session initialization code.
- Android: TF stats now exposed directly in demo and log when debug mode is
active - Android: new/better README.md documentation
Thanks to our Contributors
This release contains contributions from many people at Google, as well as:
Aaron Hu, Abhishek Aggarwal, Adam Michael, Adriano Carmezim, @AfirSraftGarrier,
Alexander Novikov, Alexander Rosenberg Johansen, Andrew Gibiansky, Andrew Hundt,
Anish Shah, Anton Loss, @b0noI, @BoyuanJiang, Carl Thomé, Chad Kennedy, Comic
Chang, Connor Braa, Daniel N. Lang, Daniel Trebbien,
@danielgordon10, Darcy Liu, Darren Garvey, Dmitri Lapin, Eron Wright, Evan
Cofer, Fabrizio Milo, Finbarr Timbers, Franck Dernoncourt, Garrett Smith,
@guschmue, Hao Wei, Henrik Holst, Huazuo Gao, @ian, @issac, Jacob Israel,
Jangsoo Park, Jin Kim, Jingtian Peng, John Pope, Kye Bostelmann, Liangliang He,
Ling Zhang, Luheng He, Luke Iwanski, @lvli, Michael Basilyan, Mihir Patel,
Mikalai Drabovich, Morten Just, @newge, Nick Butlin, Nishant Shukla,
Pengfei Ni, Przemyslaw Tredak, @rasbt, @ronny, Rudolf Rosa, @RustingSword,
Sam Abrahams, Sam Putnam, @seongahjo, Shi Jiaxin, @skavulya, Steffen MüLler,
@TheUSER123, @tiriplicamihai, @vhasanov, Victor Costan, Vit Stepanovs,
Wangda Tan, Wenjian Huang, Xingdong Zuo, Yaroslav Bulatov, Yota Toyama,
Yuan (Terry) Tang, Yuxin Wu
We are also grateful to all who filed issues or helped resolve them, asked and
answered questions, and were part of inspiring discussions.
TensorFlow v0.12.1
Bug fixes and minor changes.
TensorFlow v0.12.0
Bug fixes and minor changes.
TensorFlow v0.12.0 RC1
Bug fixes and minor changes.
TensorFlow v0.12.0 RC0
Release 0.12.0
Major Features and Improvements
- TensorFlow now builds and runs on Microsoft Windows (tested on Windows 10,
Windows 7, and Windows Server 2016). Supported languages include Python (via a
pip package) and C++. CUDA 8.0 and cuDNN 5.1 are supported for GPU
acceleration. Known limitations include: It is not currently possible to load
a custom op library. The GCS and HDFS file systems are not currently
supported. The following ops are not currently implemented:
DepthwiseConv2dNative, DepthwiseConv2dNativeBackpropFilter,
DepthwiseConv2dNativeBackpropInput, Dequantize, Digamma, Erf, Erfc, Igamma,
Igammac, Lgamma, Polygamma, QuantizeAndDequantize, QuantizedAvgPool,
QuantizedBatchNomWithGlobalNormalization, QuantizedBiasAdd, QuantizedConcat,
QuantizedConv2D, QuantizedMatmul, QuantizedMaxPool,
QuantizeDownAndShrinkRange, QuantizedRelu, QuantizedRelu6, QuantizedReshape,
QuantizeV2, RequantizationRange, and Requantize. - Go: Experimental API in Go to create and execute graphs
(https://godoc.org/github.com/tensorflow/tensorflow/tensorflow/go) - New checkpoint format becomes the default in
tf.train.Saver
. Old V1
checkpoints continue to be readable; controlled by thewrite_version
argument,tf.train.Saver
now by default writes out in the new V2
format. It significantly reduces the peak memory required and latency
incurred during restore. - Added a new library for library of matrix-free (iterative) solvers for linear
equations, linear least-squares, eigenvalues and singular values in
tensorflow/contrib/solvers. Initial version has lanczos bidiagonalization,
conjugate gradients and CGLS. - Added gradients for
matrix_solve_ls
andself_adjoint_eig
. - Large cleanup to add second order gradient for ops with C++ gradients and
improve existing gradients such that most ops can now be differentiated
multiple times. - Added a solver for ordinary differential equations,
tf.contrib.integrate.odeint
. - New contrib module for tensors with named axes,
tf.contrib.labeled_tensor
. - Visualization of embeddings in TensorBoard.
Breaking Changes to the API
BusAdjacency
enum replaced with a protocol bufferDeviceLocality
. PCI bus
indexing now starts from 1 instead of 0, andbus_id==0
is used where
previouslyBUS_ANY
was used.Env::FileExists
andFileSystem::FileExists
now return a
tensorflow::Status
intead of a bool. Any callers to this function can be
converted to a bool by adding.ok()
to the call.- C API: Type
TF_SessionWithGraph
has been renamed toTF_Session
, indicating
its preferred use in language bindings for TensorFlow. What was previously
TF_Session
has been renamed toTF_DeprecatedSession
. - C API: Renamed
TF_Port
toTF_Output
. - C API: The caller retains ownership of
TF_Tensor
objects provided to
TF_Run
,TF_SessionRun
,TF_SetAttrTensor
etc. - Renamed
tf.image.per_image_whitening()
to
tf.image.per_image_standardization()
- Move Summary protobuf constructors to
tf.summary
submodule. - Deprecate
histogram_summary
,audio_summary
,scalar_summary
,
image_summary
,merge_summary
, andmerge_all_summaries
. - Combined
batch_*
and regular version of linear algebra and FFT ops. The
regular op now handles batches as well. Allbatch_*
Python interfaces were
removed. tf.all_variables
,tf.VARIABLES
andtf.initialize_all_variables
renamed
totf.global_variables
,tf.GLOBAL_VARIABLES
and
tf.global_variable_initializers
respectively.
Bug Fixes and Other Changes
- Use threadsafe version of
lgamma
function. - Fix
tf.sqrt
handling of negative arguments. - Fixed bug causing incorrect number of threads to be used for multi-threaded
benchmarks. - Performance optimizations for
batch_matmul
on multi-core CPUs. - Improve trace,
matrix_set_diag
,matrix_diag_part
and their gradients to
work for rectangular matrices. - Support for SVD of complex valued matrices.
Thanks to our Contributors
This release contains contributions from many people at Google, as well as:
@a7744hsc, Abhi Agg, @admcrae, Adriano Carmezim, Aki Sukegawa, Alex Kendall,
Alexander Rosenberg Johansen, @amcrae, Amlan Kar, Andre Simpelo, Andreas Eberle,
Andrew Hundt, Arnaud Lenglet, @b0noI, Balachander Ramachandran, Ben Barsdell,
Ben Guidarelli, Benjamin Mularczyk, Burness Duan, @c0g, Changming Sun,
@chanis, Corey Wharton, Dan J, Daniel Trebbien, Darren Garvey, David Brailovsky,
David Jones, Di Zeng, @DjangoPeng, Dr. Kashif Rasul, @Drag0, Fabrizio (Misto)
Milo, FabríCio Ceschin, @fp, @Ghedeon, @guschmue, Gökçen Eraslan, Haosdent
Huang, Haroen Viaene, Harold Cooper, Henrik Holst, @hoangmit, Ivan Ukhov, Javier
Dehesa, Jingtian Peng, Jithin Odattu, Joan Pastor, Johan Mathe, Johannes Mayer,
Jongwook Choi, Justus Schwabedal, Kai Wolf, Kamil Hryniewicz, Kamran Amini,
Karen Brems, Karl Lattimer, @kborer, Ken Shirriff, Kevin Rose, Larissa Laich,
Laurent Mazare, Leonard Lee, Liang-Chi Hsieh, Liangliang He, Luke Iwanski,
Marek Kolodziej, Moustafa Alzantot, @MrQianJinSi, @nagachika, Neil Han, Nick
Meehan, Niels Ole Salscheider, Nikhil Mishra, @nschuc, Ondrej Skopek, OndřEj
Filip, @OscarDPan, Pablo Moyano, Przemyslaw Tredak, @qitaishui, @Quarazy,
@raix852, Philipp Helo, Sam Abrahams, @SriramRamesh, Till Hoffmann, Tushar Soni,
@tvn, @tyfkda, Uwe Schmidt, Victor Villas, Vit Stepanovs, Vladislav Gubarev,
@wujingyue, Xuesong Yang, Yi Liu, Yilei Yang, @youyou3, Yuan (Terry) Tang,
Yuming Wang, Zafar Takhirov, @zhongyuk, Ziming Dong, @guotong1988
We are also grateful to all who filed issues or helped resolve them, asked and
answered questions, and were part of inspiring discussions.