[MUSIC PLAYING] ELIE BURZSTEIN: If you
are new to our session on cutting edge TensorFlow,
my name is Elie. And today with Josh,
Mike, and Sophien, we have four exciting
projects for you. First, I will talk
about Keras Tuner. Then, Josh will talk about
probability programming. Next, Mike will talk
about TF-Ranking. And finally, Sofien will show
you how to use TensorFlow. Graphics Let me start by telling you
about Keras Tuner, which is a framework we initially
developed internally to bring new [INAUDIBLE]
model to faster to production. Before getting started,
let me ask you a question. How many of you have ever spent
time optimizing your model performances. Right, I see quite
a few hands raised. This is not surprising
because getting the best model performances is not easy. Getting the best
model performances is hard because there are many
parameters such as the learning rate, the batch size,
and the number of layers which influence the
model performances. Moreover, those parameters
are interdependent, which make finding the
optimal combinations by hand very challenging. This is why we rely hypertuning
to automatically find the best combinations. However so far,
hypertuning have been known to be not easy to use. So if hypertuning
is essential to get the optimal performances,
this begs the question, can we make it easy
as one, two, three? And the answer is yes. This is why today I
am happy to introduce to Keras Tuner which is a tuning
framework made for humans. Keras Tuner is a
tuning framework designed to make the
life of AI practitioner as easy as possible. It also helps hypertuner
algorithm creators and model designers by providing them with
a clean and easy to use API. For AI practitioner,
which is most of us, Keras Tuner makes
moving from a base model to a hypertuned
model quick and easy. Let me show you how this is
done by converting a basic MNIST model to a hypertuned one. We will only have to
change a few lines of code. Here's our basic MNIST
model that is a TensorFlow Keras controlled API. This is something I'm sure
all of you have seen already. As you can set on the side,
all parameter are fixed. For example, our learning
rate is set to 0.001. So let's transition it
to a hypertunable model in three steps. First, we wrap up our
model in a function. Second, we define
hyper-parameter ranges for the parameter that we
would like to optimize. Here for example, we're going
to optimize the learning rate which is one of the
most important parameters to hypertune. Finally as the last step, we
replace our fixed parameters with our hyper-parameter range. And we're done. Our model is ready
to be hypertuned. This is as easy. Besides offering an
intuitive API Keras Tuner, we'll also provide you with
state of the art hypertuning algorithm, tuneable
architectures which are ready to go, and an
automatic experimental recording which make it easy
for you to analyze, share, and reproduce your results. Originally, I started developing
Keras Tuner to quickly try it on new models for
[INAUDIBLE] purposes including the one we
developed to protect Gmail against malware and phishing. Band detection is one
of the core building block we need to protect your
inbox against phishing email that impersonates
the brand you love. This is why today, our
[INAUDIBLE] example would be to show you how
to build a simple and yet accurate brand logo classifier
as logo identification is one of the critical components
to detect brand spoofing email. The first thing we need to
do is to load our dataset. In that example, we
have about the 150 icons from various brands, including
the ones displayed on the side. We also need to
set a few variables such as batch size and
the number of icons we're going to use [INAUDIBLE]. Next, our data set is
very small so we'll rely on data augmentation to
create enough training data. This slide shows you a few
examples of the augmented icons we're going to feed to
the classifier as training input, the output
being the brand names. We are going to save the real
icon as our validation dataset to make sure that our
classifier degenerates well. To establish a
baseline, let's first train a ResNet101v2 which is
one of the most common and well known model architectures. As you can see on the
[INAUDIBLE] graph, our model did converge but
the actuality on real icon is not great. We barely reached 79% accuracy. And it's also quite big
with 44 million parameters. Well, that's OK. We can use Keras Tuner to
find a better model which is smaller and more accurate. So to do that, the first
thing we need to do is to create, as the MNIST
model a model function and input TunableResNet. TunableResNet is a
tunable version of ResNet that we will provide
with Keras Tuner as one of the architectures
which are ready to tune. Next, you add a few
layers on top of it and combine the model. Then well, we
initialize the tuner and we give it $500 to spend on
tuning to find the best model. And we ask it to maximize
evaluation accuracy. Finally, we have to
launch the tuning and wait for the results. So did it work? Well, yes it did. Actually, Keras Tuner
found a way better model. Our new model have
now 100% accuracy and only takes 24
million parameters. So we get a faster
and more accurate model thanks to hypertuning. Keras Tuner works with
many of the tools you love, including TensorBoard,
Colab, and BigQuery, and many more to come. One more thing. Hypertuning takes a long
time so to make everything more convenient, we
will be releasing alongside with Keras Tuner an
optional cloud service that will allow you to monitor
your tuning on the go whether it's from your
phone or from your laptop. Here is a screenshot of an early
version of the mobile dashboard to give you a sense
of what to expect. So the design is not
final, but the UI will show you how long before
you're tuning complete, as well as offer you a visual
summary of the model trained so far so you can know
how your tuning is going. Thank you for attending today. We are really excited
about Keras Tuner. And you can sign up today
for the early access program by heading to
g.co/research/kerastunereap. [APPLAUSE] Josh is now going to talk
about [INAUDIBLE] programming and TensorFlow. JOSH DILLON: OK. Hi, I'm Josh. And today, we'll be
talking about everyone's favorite topic-- probability. So let's just start
with a simple example. So suppose we're trying to
predict these blue dots-- that is, the Y-coordinate
from the X-coordinate. And Keras makes this
pretty easy to do. As you can see here, we
have a dense neural network with one hidden layer
outputting one float. And that float is the
predicted Y-coordinate. And we've chosen mean squared
error as a loss, which is a good default choice. But the question is, how do we
make our loss function better? What does a better loss
function look like? And how would we even know? How would we evaluate
the fit of this model? And so we would like to be able
to specify the negative log likelihood as a
generic loss, but then encode the distributional
assumptions in the model. And furthermore, if
we're doing that, then wouldn't it
be nice to get back an object for which
we can query-- ask for the mean, the variance,
the entropy, et cetera. And the answer is
we can do this. Using a TensorFlow probability
distribution layer, we can say that we want the
neural network to output a distribution, basically. And the way this
works is as you can see, the second to the last
layer here outputs one float. That float is interpreted
as the location or mean of a normal distribution. And that's how we can
implement linear regression. And as you see here, the fit
is this sort of red line. But what's cool
is, we're actually outputting a distribution. Right? So you can take
this output and just ask for the entropy or the
variance of the prediction. So that's nice. But now that we've
done this, there's sort of something that
looks a little fishy here. We're learning the mean, but
not the standard deviation. It seems like maybe
a missed opportunity to improve our model. And that missed opportunity
is now self-evident that we're learning a
distribution directly-- sort of an idea that was hidden
in what was otherwise the mean square error. So to learn standard
deviation, it's just another one or two line change. Instead of outputting one
float, we now output two. One is interpreted as the
mean as before, the location. The other when passed
through a soft plus function, is now interpreted as
the standard deviation. And what you see is
we're now able to get this sort of green
line and the red lime-- green being the
standard deviation, red being the mean
fit from before. As you can see, sort
of the green line diverges as X increases. And so that suggests
that our data-- the variability of
Y, actually-- changes as a function of
X. Statisticians call this heteroskedasticity. But I'd just like to think of
it as learning known unknowns. There was variability
present in our data. And because we took a
more probabilistic view of our model, it was pretty easy
to see how we should fit that. So that seems pretty cool. But I guess the question
is, now that we're thinking about sort
of known unknowns or aleatoric uncertainty,
what about unknown unknowns? Do we even have enough data
to accurately make the claim that this is the
standard deviation and mean of this
regression problem? And if we don't, how
might we get there? And the answer is-- or an answer-- is
to be Bayesian. Rather than to just fit
the weights, if instead we think about weights is being
drawn from a distribution and try to find what might
be the best posterior distribution, then
we can actually capture some degree
of unknown unknowns. That is, keeping track
of how much evidence we have or don't have to make
the prediction we want to make. So in practice, this
boils down to something that looks a lot like
learning an ensemble. As you can see here,
there are numerous random draws each
corresponding to a line. But what's cool is
computationally, we only pay a small additional
overhead for fitting what is otherwise an
infinite number of models. So that seems pretty cool. But we seem to have lost
the aleatoric uncertainty-- the known unknowns. And so can we get it back? Yes. Since all of this
is modular, you can simply specify whatever
assumptions you want to make. We're back to fitting
the standard deviation by outputting two floats
from that penultimate layer. And yet, each of those
dense variational layers are sort of representing
an infinite number of possible weights. So now, we're starting to get
a fairly sophisticated model. And to get here, all
we had to do is just keep swapping out one sort of
cross layer for a probability layer, output a
distribution, change weights to be distributions. So that's pretty
powerful and yet, a sequence of simple changes. Of course now we can
ask, what if we are not even sure that a line is the
right thing to be fitting here? What if we actually want
to think about the loss function itself as
being a random variable? In this framework where we're
able to just encode ideas as random variables,
everything's on the table, right? So what would that look like? And how would we do it? The answer in this case is to
use the variational Gaussian process layer. And from that, we conclude the
data wasn't even linear at all. In fact, it had this dampened
sinusoidal structure. So no wonder we're having
a hard time fitting it. We were using-- in
some sense-- just fundamentally the wrong model. And the way we got here
is by just questioning every assumption in
our model, but not having to think about
sort of the relationship between different
losses which otherwise might seem arbitrary--
rather, a sequence of modeling assumptions. So how was this all so easy? With TensorFlow probability. TensorFlow probability
is a toolbox for probabilistic modeling built
on or in or using TensorFlow. Statisticians and
data scientists will be able to write
and launch the same model and ML researchers
and practitioners can make predictions
with uncertainty. You saw just a small part of the
overall TensorFlow probability tool box. More broadly, it offers
tools for building models and for doing inference
within those models. On the model building
side, the lowest level of most basic abstraction
is distributions. You saw the normal distribution. It's exactly what you think-- gamma, exponential, et cetera. These are sort of the
building blocks of your model. And they're all built to take
advantage of vector processing hardware, and in a way
that sort of automatically takes advantage of it. Next, we have bijectors. This is a module for
transforming distributions to bestill other distributions. Defeomorphisms is the $10
word to describe these. And they can range from a simple
sort of exponential logarithm transform to more
complicated transforms that combined neural nets
with the defeomorphism-- so for example, [INAUDIBLE]
regressive flows, real MVP. Fairly exotic neural densities
can be built using bijectors. You saw layers-- a
few examples of those. We also have a number of
losses for making Monte Carlo approximations. And joint distribution
is an abstraction for combining multiple
random variables as one. On the inference side of the
fence we have Markov chain Monte Carlo-- no probabilistic
modeling toolbox would be complete without it-- within which have
Hamiltonian Monte Carlo and a number of other
transition kernels which generally take
advantage of TensorFlow's automatic differentiation
capability. We also tools for
variation inference, which turns inference into
an optimization problem. And finally, we have
additional optimizers that are useful for
probabilistic models-- for example, quasi
second order methods like BFGS as well
as methods that don't use the gradient
for cases where that's computationally prohibitive. So TensorFlow
probability is widely used within alphabet, including
Google Brain and DeepMind. It also is used externally. One of the earliest
adopters is Baker Hughes GE. And they use TFP to
basically treat models as random variables for
purpose of detecting anomalies. So one problem that they're
particularly interested in is detecting when jet
engines will fail. And luckily, their
dataset doesn't have failing jet engines. That would be a terrible thing. And so we have to be Bayesian
and sort of infer the evidence that we don't have. So using TensorFlow
probability and TensorFlow, they're able to process an
enormous amount of data-- six terabytes. They are able to explore
over 250,000 different model architectures and
to great profit, seeing a 50% reduction
in false positives and a 200% reduction
in false negatives. And this sort TensorFlow graph
represents their pipeline-- the orange boxes you see
here-- heavily use TensorFlow probability to, as I said, treat
the model as a random variable. So the question I
want to leave you with is, who will be the
next success story? TensorFlow probability is an
open source Python library built using
TensorFlow, which makes it easy to combine deep learning
and probabilistic models on modern hardware. You can pip install
it right now. Learn more at
TensorFlow.org/probability or shoot us an email. If you're interested also
in learning more about Bayesian techniques
or just TensorFlow, TensorFlow probability, Google
Bayesian Methods for hackers-- the online version
of this book, we rewrote to use
TensorFlow probability. I think it's a great way to get
started if you're interested. On our GitHub
repository, you'll also find numerous
examples, including the one you saw today. Thank you. And with that, Mike will
talk to you TF ranking. [APPLAUSE] MICHAEL BENDERSKY:
Thank you Josh. Hello everyone. My name is Michael. And today, I'll be talking about
TF ranking, a scalable learning to rank library for TensorFlow. So first of, I'll
start by defining what is learning
to rank, which is the problem we're trying to
solve with TensorFlow ranking. Imagine you have
a list of items. And here, the green shades
indicate the relevance levels of these items. The goal of learning to rank is
to learn a scoring function, F, such as to take a
list of these items and produces an optimal
ordering of these items in their order of the relevance. So the greenest item
would be at the top. This seems like a
very abstract problem. However, it has a lot of
practical applications. In search, we rank documents
in response to user queries. In recommendation systems, we
rank items for a given user. In dialogue systems, we rank
responses for a user request. And similar in questioning
answering systems, we rank answers in
response to user questions. One very common
application of ranking that requires massive
amount of data is a click position
optimization. In this setting, the function,
F, takes in as an input a rank list where
we have some clicks on the items in the list. The perfect ranking
in this case assumes that the click
documents should be placed at the top of the list. Later in this talk, I will show
an example of this application. OK, so let's talk about
TensorFlow ranking or TF ranking for short. It was first announced on
Google AI blog on December 2018. And it's a first
open source library that does learning to rank
at scale with deep learning approaches. It's actively maintained and
developed by the TF franking team here at Google. And it is fully compatible with
entire TensorFlow ecosystem, including tools like TensorBoard
and TensorFlow Serving. One interesting
problem which we're trying to solve
with TF ranking is that unlike classification
or regression metrics, ranking metrics are
usually non-convexed. In fact, most [INAUDIBLE]
ranking metrics are either
discontinuous or flat. I'll give an example. In this case, we
see a step function. And the step here
indicates what happens when we change the score
of the items in the list and then there is a
rank swap that occurs. When the score changes
and the swap occurs, we are basically becoming
discontinuous in the function space. The rest of the function
is flat because we do not change the ordering of the
items when we change the scores. These types of function are
very difficult or impossible to directly optimize
[INAUDIBLE] gradient descent. Due to that, researchers
in learning to rank have been developing different
types of loss functions. One common loss function is
the point [INAUDIBLE] loss, where we basically take
as an input each item and assign to them a probability
of them being relevant. This is very similar to a
classification or regression case, but completely
ignores the relationship between the different
items in the list. So pairwise ranking
losses were proposed. These use pair comparisons
to order the list. So instead of learning a
probability for each item, we learn probabilities
of one item being preferable
to another item. Again, this does not
capture the entire list-- just pairs. So list-wise ranking
losses were proposed instead in the which function,
F, takes one item at a time but tries to optimize the
ordering of the entire list producing pi star, which
is the optimal permutation on the items. One new development we
propose in TensorFlow ranking is this idea of
multi-item scoring. So unlike in the previous slide
where the function, F, takes one item at a time, in
multi-item scoring scenario, the function, F, takes
all the item in at times and produces the optimal
ordering, pi star. This is really important for
complex interdependent inputs and allows to use the
context of other items to make better
ranking decisions. One important thing
to note is that we support many, many metrics
in TensorFlow ranking. So we support standard metrics
like (N)DCG, ARP, Precision@K, and others. But it's also very easy
to add your own metrics to TensorFlow ranking. And once you have the
metric you want to optimize and you use TensorBoard,
you can easily visualize it while you train your model. So you can see how your (N)DCG
or other metric progresses as you model trains
across the apex. So let me jump
into describing how you can develop your own state
of the art ready to deploy learning to rank model in four
simple steps using TensorFlow ranking. First, you specify
a scoring function. Then you specify the metrics
that you want to optimize for. Then you specify
your loss function. And finally, you build
your ranking estimate using all of these
three previous steps. Here how it looks in code. First, we define the
scoring function. And here, we use three hidden
layer scoring function. Then we specify the
evaluation metrics. In this case, we
use (N)DCG metrics and we use (N)DCG at top ranks. Finally, we need to
specify the lowest function and the ranking estimator. Here, we propose using a ranking
head with a soft max loss. However, note the
soft max loss can be easily replaced by any other
loss supported by TF ranking. So it's very easy to
switch between losses by simply replacing this
parameter to something else. And finally, you build
the ranking estimator. Interesting thing about
the ranking estimator, it takes into as a
parameter this group size. So this group
size, if you set it to something that
is greater than one, you're essentially enabling
the multi-item scoring I was referring to before. If you set up to
one, you fall back to using standard learn
to rank approaches with single item scoring. So let's say in less
than 50 lines of code, you're already build your
own learning to rank model. And now, you're ready to
train it on your train data. OK, I'm just going
to finish this by giving an example of how
TF ranking works in practice. And I'm going to go back to
the click position optimization problem I posed before. To remind you, in this case,
the perfect ranking when we take in as an
input a click data, we produce a rank
list [INAUDIBLE] the clicked items will be
at the top of the list. We're using an
internal dataset here of around one billion
query document pairs. And for each query
document pair, we extract the following-- some numerical features
that we associate with this query document
pair, the query and document text, the position at which
document was displayed. And as labels, we use click
or no-click information about this particular
document for this query. Here, we compared the
performance of your TF ranking to lambdaMART which is a
state of the art learning to rank approach. It's interesting to know that
when you compare TF ranking using numerical
features only, it is comparable to
lambdaMART on this dataset. However, the more
interesting thing is that when we add
text as features-- we achieve big improvements,
especially when using TF ranking in
ensemble with lambdaMART. On this dataset, we
achieve over 3% gain when we're adding sparce
textual features into the model and ensembling lambdaMART
and TF ranking, which is a very significant
improvement for a dataset this size. All right, so I
hope I got you all excited about using TF ranking. What should you do next? So you can go and read
our paper and archive about TF ranking and
all the work that went into developing it. Then, check out our
GitHub repository. It has all information
about TF ranking. And install TF ranking from
there by using pip install. You can run through
a simple call that we have on our
GitHub repository. And that's it. You're ready to start
building your next learn to rank application. I would like to extend
huge thanks to everyone on the TF ranking team who
made this project possible. And next up is Sofien to talk
about TensorFlow graphics. [APPLAUSE] SOFIEN BOUAZIZ: Thanks Mike. Thanks. Hi everyone. My name is Sofien. And today, I'm proud to
announce the first release of a new library called
TensorFlow graphics. But before getting
any further, let's start from the very beginning
and define computer graphics. Computer graphics is a
subfield of computer science which studies methods for
digitally synthesizing and manipulating visual content. Most of you have been
exposed to computer graphics through movies and
video games where amazingly beautiful
synthetic scenes are rendered photo-realistically. And this is thanks
to many advances in the computer graphics field. To give you some
perspective, this is what first computer
graphics in 1958 with the first interactive
game called Tennis for Two. As can see, we have
come a long way. To generate
beautiful renderings, a computer graphics system
needs [INAUDIBLE] input in description. These often include
transformations which explain how the
objects are placed in space, camera models which describe
from which point of view the scene needs to be rendered,
light and matter models-- defining object appearances--
and finally [INAUDIBLE] geometry. These parameters are then
interpreted by renderer to generate a beautiful image. Now in comparison to
computer graphics, computer vision is
concerned with the theory beyond artificial system
that extract information from images. So we can see computer
vision and computer graphics as a duality. A computer vision system
would start from an image and try to automatically
extract a scene description, estimating the three dimensional
position and orientation of objects, understanding
the material properties, or just recognizing these
objects based on their 3D geometry. Answering these type of
questions about the three dimensional world is
fundamental for many machine learning applications. A good example are autonomous
vehicles and robots that need to reason about
three dimensional objects and their relationship in space. However, to train a
machine learning system solving this complex 3D vision
tasks, a large quantity of data is needed. Labeling data being a
complex and costly process, it is important to a mechanism
to design machine learning systems that can reason about
the three dimensional world while being trained
without much supervision. So combining computer
vision and computer graphics provides a unique
opportunity to leverage a vast amount of readily
available unlabeled data. This can be done by a
technique called analysis by synthesis where the
vision system extracts the scene parameters
and the graphic system renders back an
image based on them. If the rendering
matches original image, the vision system
has done a great job at extracting the
correct scene parameters. In this setup, computer
vision and computer graphics go hand in hand,
forming a single machine learning system similar
to a neutron coder. TensorFlow graphics
is being developed to solve this type of problems. And we are aiming at providing
a set of differential graphics layer that can be used in your
[INAUDIBLE] machine learning models. So for the sake of time, we'll
focus on four useful components that can be included into
a deep learning models to solve these interesting
three division tasks. So during the next slide,
you will see a QR code like this one. If you are interested,
use your smartphone. Point your smartphone
toward the slide and you will be directed to
the [INAUDIBLE] free resources. So get ready. These QR codes are going to
come back in later slides. OK so now now,
let's jump right in and see how 3D transformation
can be expressed using TensorFlow graphics. One basic building block
for manipulating 3D shapes are 3D rotations. In TensorFlow graphics,
we are providing a set of classical
representation, also implemented function,
to convert between them. One easy way to
represent rotation is by using an axis and an
angle defining our major object to rotate around this axis. This can be easily expressed
in TensorFlow graphics using our transformation
module where in this code, we first loads the
vertices of the cube. We then define the axis
of rotation and the angle. And finally, we apply
the transformation to the cube using
rotate function of the axis single module. Now that we have
seen how easy it is to express rotation
in TensorFlow graphics, let's move on to camera models. Camera models play
a fundamental role in computer vision as the
great [? influencer ?] of appearances of three
dimensional objects that are projected onto
the camera plane. As you can see in
this slide, the cube appears to be
scanning up and down. But it is actually the camera
focal lens that is changing. Currently in
TensorFlow graphics, we propose two type of cameras-- an autographic and a
perspective camera model. So let's see how the
perspective camera model works. One common operation
used with a camera model is to project a set of 3D
points onto a 2D camera plane. And this can also be expressed
easily with TensorFlow graphics where in this code
similarly we first load the vertices of the cube. We then define the intrinsic
parameters of the camera and this allows us to map
the 3D vertices of the cube to 2D using the project function
of the perspective camera module. So far, we
[INAUDIBLE] 3D objects and optimize them to 2D. But what about the
appearances of these objects? In TensorFlow graphics, we're
providing a few simple material models are going to render
3D objects using TensorFlow. To be slightly more concrete,
these material models define how the light reflects
off the surface of an object. So given an incoming light
action, how much of the light will bounce off the surface
toward a particular outgoing direction? So the input parameter needed
for the material model are the surface [INAUDIBLE]
of the 3D object, the incoming light direction,
the outgoing direction-- for example, pointing
toward the camera-- and the material parameter-- in
this case, color and shininess. Given all these inputs,
TensorFlow graphics can evaluate how much
light is reflected off the surface and the
outgoing direction which allows us to shape the camera pixel. And in case this
is all new for you, we provide a collab
where you would be able to see this
concept in more details. OK so now that we have seen
some of [INAUDIBLE] graphics functionality that TensorFlow
graphics introduces, let's talk about
geometry-- and especially how TensorFlow graphics can
help in expressing convolution, on measures, and point clouds. Image convolution is
a basic building block of deep learning. They have been extensively
used in many learning tasks such as image classification. The nice parts of
dealing with images is that they are represented
by a uniform grid, which makes convolution
[INAUDIBLE] easy to implement and consequently, convolution
[INAUDIBLE] networks. In TensorFlow image convolution
are readily available. However, things become
a bit more complicated when dealing with three
dimensional objects which are often defined
as measures in point clouds and are not
represented as a uniform grid. This makes convolution
hard to implement, and also now networks
based on them. In recent years sensor giving
three dimensional point clouds are becoming part
of everyday life from smartphone def sensors to
self-driving car [? radars. ?] It is therefore
important to open source such functionalities
for developers and researchers to be able to
efficiently use 3D data and extract
information from them. In TensorFlow graphics,
we propose a set of graph convolution
operators which can almost be used as a
drop in with placement after convolution. So in this code, we
first must load the mesh in the form of vertices
and connectivity. We then apply one of the
graph convolution operator that TensorFlow
graphics provide. It is also important to
note that we are providing the equivalent Keras layers. And finally, the
convolution layer can be followed by a classic
[INAUDIBLE],, all the layers. To demonstrate how
this can be used inside a more complex
neural networks, we also provide a
collab doing three dimensional semantic human part
segmentation as an example. So during the few
slides, we are seeing a small set of the TensorFlow
graphics functionalities. And the good news is that we
are providing many more of them. And we will also add more
of these functionalities in the near future. But there's also one more thing. We are glad to announce
a new TensorFlow plug-in allowing measures and
point cloud visualization. And I believe that
this plug-in will be amazingly useful for
developers and researchers that want to use TensorFlow to
analyze three dimensional data. So get started today. We provide the pre-package. And installing the library
is as easy as doing pip install tensorflow-graphics. In case you are really excited
about TensorFlow graphics, we have a GitHub
page from which you can pull our latest features. We are also providing a
comprehensive API documentation and multiple collabs from
which you can learn about some of the functionalities
we are providing. Before ending the
talk, I would like to thank people that
have really contributed to make this project happen. Thank you very much, everyone. I hope you enjoyed
this presentation. [MUSIC PLAYING]