Giter Site home page Giter Site logo

wookayin / tensorflow-plot Goto Github PK

View Code? Open in Web Editor NEW
298.0 15.0 43.0 4.93 MB

๐Ÿ“ˆ TensorFlow + Matplotlib as TF ops

Home Page: http://tensorflow-plot.readthedocs.io

License: MIT License

Python 100.00%
tensorflow tensorboard matplotlib plot python tfplot

tensorflow-plot's Introduction

TensorFlow Plot (tfplot)

pypi Documentation Status Build Status

A TensorFlow utility for providing matplotlib-based plot operations โ€” TensorBoard โค๏ธ Matplotlib.

๐Ÿšง Under Construction โ€” API might change!

It allows us to draw any matplotlib plots or figures into images, as a part of TensorFlow computation graph. Especially, we can easily any plot and see the result image as an image summary in TensorBoard.

Quick Overview

There are two main ways of using tfplot: (i) Use as TF op, and (ii) Manually add summary protos.

Usage: Decorator

You can directly declare a Tensor factory by using tfplot.autowrap as a decorator. In the body of the wrapped function you can add any logic for drawing plots. Example:

@tfplot.autowrap(figsize=(2, 2))
def plot_scatter(x: np.ndarray, y: np.ndarray, *, ax, color='red'):
    ax.scatter(x, y, color=color)

x = tf.constant([1, 2, 3], dtype=tf.float32)     # tf.Tensor
y = tf.constant([1, 4, 9], dtype=tf.float32)     # tf.Tensor
plot_op = plot_scatter(x, y)                     # tf.Tensor shape=(?, ?, 4) dtype=uint8

Usage: Wrap as TF ops

We can wrap any pure python function for plotting as a Tensorflow op, such as:

  • (i) A python function that creates and return a matplotlib Figure (see below)
  • (ii) A python function that has fig or ax keyword parameters (will be auto-injected); e.g. seaborn.heatmap
  • (iii) A method instance of matplotlib Axes; e.g. Axes.scatter

Example of (i): You can define a python function that takes numpy.ndarray values as input (as an argument of Tensor input), and draw a plot as a return value of matplotlib.figure.Figure. The resulting TensorFlow plot op will be a RGBA image tensor of shape [height, width, 4] containing the resulting plot.

def figure_heatmap(heatmap, cmap='jet'):
    # draw a heatmap with a colorbar
    fig, ax = tfplot.subplots(figsize=(4, 3))       # DON'T USE plt.subplots() !!!!
    im = ax.imshow(heatmap, cmap=cmap)
    fig.colorbar(im)
    return fig

heatmap_tensor = ...   # tf.Tensor shape=(16, 16) dtype=float32

# (a) wrap function as a Tensor factory
plot_op = tfplot.autowrap(figure_heatmap)(heatmap_tensor)      # tf.Tensor shape=(?, ?, 4) dtype=uint8

# (b) direct invocation similar to tf.py_func
plot_op = tfplot.plot(figure_heatmap, [heatmap_tensor], cmap='jet')

# (c) or just directly add an image summary with the plot
tfplot.summary.plot("heatmap_summary", figure_heatmap, [heatmap_tensor])

Example of (ii):

import tfplot
import seaborn.apionly as sns

tf_heatmap = tfplot.autowrap(sns.heatmap, figsize=(4, 4), batch=True)   # function: Tensor -> Tensor
plot_op = tf_heatmap(attention_maps)   # tf.Tensor shape=(?, 400, 400, 4) dtype=uint8
tf.summary.image("attention_maps", plot_op)

Please take a look at the the showcase or examples directory for more examples and use cases.

The full documentation including API docs can be found at readthedocs.

Usage: Manually add summary protos

import tensorboard as tb
fig, ax = ...

# Get RGB image manually or by executing plot ops.
embedding_plot = sess.run(plot_op)                 # ndarray [H, W, 3] uint8
embedding_plot = tfplot.figure_to_array(fig)       # ndarray [H, W, 3] uint8

summary_pb = tb.summary.image_pb('plot_embedding', [embedding_plot])
summary_writer.write_add_summary(summary_pb, global_step=global_step)

Installation

pip install tensorflow-plot

To grab the latest development version:

pip install git+https://github.com/wookayin/tensorflow-plot.git@master

Note

Some comments on Speed

  • Matplotlib operations can be very slow as Matplotlib runs in python rather than native code, so please watch out for runtime speed. There is still a room for improvement, which will be addressed in the near future.

  • Moreover, it might be also a good idea to draw plots from the main code (rather than having a TF op) and add them as image summaries. Please use this library at your best discernment.

Thread-safety issue

Please use object-oriented matplotlib APIs (e.g. Figure, AxesSubplot) instead of pyplot APIs (i.e. matplotlib.pyplot or plt.XXX()) when creating and drawing plots. This is because pyplot APIs are not thread-safe, while the TensorFlow plot operations are usually executed in multi-threaded manners.

For example, avoid any use of pyplot (or plt):

# DON'T DO LIKE THIS !!!
def figure_heatmap(heatmap):
    fig = plt.figure()                 # <--- NO!
    plt.imshow(heatmap)
    return fig

and do it like:

def figure_heatmap(heatmap):
    fig = matplotlib.figure.Figure()   # or just `fig = tfplot.Figure()`
    ax = fig.add_subplot(1, 1, 1)      # ax: AxesSubplot
    # or, just `fig, ax = tfplot.subplots()`
    ax.imshow(heatmap)
    return fig                         # fig: Figure

For example, tfplot.subplots() is a good replacement for plt.subplots() to use inside plot functions. Alternatively, you can just take advantage of automatic injection of fig and/or ax.

TensorFlow compatibility

Currently, tfplot is compatible with TensorFlow 1.x series. Support for eager execution and TF 2.0 will be coming soon!

License

MIT License ยฉ Jongwook Choi

tensorflow-plot's People

Contributors

shwang avatar stefanwayon avatar wookayin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tensorflow-plot's Issues

Introduce decorator-style API

Decorators are pretty?

For example (name is undecided), we can simply define a decorated "op builder" function:

@tfplot.op(batch=True)
def plot_heatmap(heatmap, cmap='jet')
    # heatmap: a [16x16] numpy array here
    fig, ax = tfplot.subplots(figsize=(4, 3))
    im = ax.imshow(heatmap, cmap=cmap)
    fig.colorbar(im)
    return fig

# heatmap_tensor : a float32 Tensor of shape [4, 16, 16], for example
>>> plot_heatmap(heatmap_tensor)
Tensor("PlotHeatmap:0", shape=(4, ?, ?, 3), dtype=uint8)

Instead of:

# heatmap_tensor : a float32 Tensor of shape [4, 16, 16], for example
>>> PlotOp = tfplot.wrap(figure_heatmap, batch=True, name='PlotHeatmap')
>>> PlotOp(heatmap_tensor)
Tensor("PlotHeatmap:0", shape=(4, ?, ?, 3), dtype=uint8)

PyPI?

Any hope of getting this into PyPI? Looks like the code/docs have stabilized...

KeyError on run-time

The following KeyError might happen during the execution (e.g. sess.run()) of plot functions, where an exception is thrown outside:

KeyError: (1.0, 0.01, '0.010', 'black', 'center_baseline', 'left', -1142507319491788459, None, None, 100.0, <weakref at 0x7fadaec55db8; to 'RendererAgg' at 0x7fadaca0b198>, 1.2)
Detailed stacktrace (click to expand)
  File "$PREFIX/lib/python3.6/site-packages/tfplot/ops.py", line 80, in _render_image
    image = figure.to_array(fig)

  File "$PREFIX/lib/python3.6/site-packages/tfplot/figure.py", line 81, in to_array
    fig.canvas.draw()

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 402, in draw
    self.figure.draw(self.renderer)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/artist.py", line 50, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/figure.py", line 1649, in draw
    renderer, self, artists, self.suppressComposite)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
    a.draw(renderer)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/artist.py", line 50, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2628, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/image.py", line 138, in _draw_list_compositing_images
    a.draw(renderer)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/artist.py", line 50, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/axis.py", line 1187, in draw
    renderer)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/axis.py", line 1125, in _get_tick_bboxes
    extent = tick.label1.get_window_extent(renderer)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/text.py", line 930, in get_window_extent
    bbox, info, descent = self._get_layout(self._renderer)

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/text.py", line 430, in _get_layout
    self._cached[key] = ret

  File "$PREFIX/lib/python3.6/site-packages/matplotlib/cbook/__init__.py", line 623, in __setitem__
    del self[self._killkeys[0]]

I suspect this would be a multithread-related issue (matplotlib is not thread-safe). The only workaround I have at this point is to simply ignore the exception.

Compatibility with matplotlib 3.1.1

Hi,
I have experienced some problems when using the tfplot using the new version of matplotlib.
More details about the error are:

Traceback (most recent call last):
  File "tmp.py", line 169, in <module>
    main()
  File "tmp.py", line 160, in main
    summary = session.run(summary_op)
  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 950, in run
    run_metadata_ptr)
  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1173, in _run
    feed_dict_tensor, options, run_metadata)
  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1350, in _do_run
    run_metadata)
  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1370, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.UnknownError: AttributeError: 'FigureCanvasBase' object has no attribute 'tostring_argb'
Traceback (most recent call last):

  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tensorflow/python/ops/script_ops.py", line 209, in __call__
    ret = func(*args)

  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tfplot/ops.py", line 101, in _render_image
    image = figure.to_array(fig)

  File "/home/makansio/venv/tf1.14/lib/python3.6/site-packages/tfplot/figure.py", line 92, in to_array
    img = np.frombuffer(fig.canvas.tostring_argb(), dtype=np.uint8)

AttributeError: 'FigureCanvasBase' object has no attribute 'tostring_argb'

I have solved it by reinstalling an older version of matplotlib == 3.0.2

Best,
Osama

Multi-threading pyplot APIs causes issues

This implementation includes showing histogram figures by calling plt.figure(). Here're the codes I ran:
https://github.com/shaohua0116/Activation-Visualization-Histogram
I know that one way to deal with it is using object-oriented matplotlib APIs. And I first temporarily fixed it by setting intra_op_parallelism_threads=1 and inter_op_parallelism_threads=1 for tf.ConfigProto. If want to reproduce the errors, please simply comment the two lines:
https://github.com/shaohua0116/Activation-Visualization-Histogram/blob/master/trainer.py#L99
https://github.com/shaohua0116/Activation-Visualization-Histogram/blob/master/trainer.py#L100
and just run the trainer.py code.
The error msgs are as following:

  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/script_ops.py", line 82, in __call__
    ret = func(*args)
  File "/usr/local/lib/python2.7/dist-packages/tfplot/ops.py", line 61, in _render_image
    fig = plot_func(*args, **kwargs)
  File "/home/walter/task/Activations/model.py", line 111, in draw_act_hist
    n, bins, patches = plt.hist(np.reshape(h, [grid_shape[0]*grid_shape[1]]), 50, normed=1, facecolor='blue', alpha=0.75)
  File "/home/walter/.local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3067, in hist
    ax = gca()
  File "/home/walter/.local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 950, in gca
    return gcf().gca(**kwargs)
  File "/home/walter/.local/lib/python2.7/site-packages/matplotlib/figure.py", line 1368, in gca
    return self.add_subplot(1, 1, 1, **kwargs)
  File "/home/walter/.local/lib/python2.7/site-packages/matplotlib/figure.py", line 1022, in add_subplot
    self._axstack.add(key, a)
  File "/home/walter/.local/lib/python2.7/site-packages/matplotlib/figure.py", line 129, in add
    Stack.remove(self, (key, a_existing))
  File "/home/walter/.local/lib/python2.7/site-packages/matplotlib/cbook.py", line 1391, in remove
    raise ValueError('Unknown element o')
ValueError: Unknown element o
2017-06-10 19:59:27.837878: W tensorflow/core/framework/op_kernel.cc:1152] Internal: Failed to run py callback pyfunc_13: see error log.
2017-06-10 19:59:27.837998: W tensorflow/core/framework/op_kernel.cc:1152] Internal: Failed to run py callback pyfunc_13: see error log.
         [[Node: histogram/h5/Plot_0 = PyFunc[Tin=[DT_FLOAT, DT_INT64], Tout=[DT_UINT8], token="pyfunc_13", _device="/job:localhost/replica:0/task:0/cpu:0"](histogram/h5/Classifier/fully_connected_2/mul_1_unstack/_191, histogram/h5/Tile_5_unstack)]]
2017-06-10 19:59:27.840911: W tensorflow/core/framework/op_kernel.cc:1152] Internal: Failed to run py callback pyfunc_13: see error log.
         [[Node: histogram/h5/Plot_0 = PyFunc[Tin=[DT_FLOAT, DT_INT64], Tout=[DT_UINT8], token="pyfunc_13", _device="/job:localhost/replica:0/task:0/cpu:0"](histogram/h5/Classifier/fully_connected_2/mul_1_unstack/_191, histogram/h5/Tile_5_unstack)]]
2017-06-10 19:59:27.840978: W tensorflow/core/framework/op_kernel.cc:1152] Internal: Failed to run py callback pyfunc_13: see error log.
         [[Node: histogram/h5/Plot_0 = PyFunc[Tin=[DT_FLOAT, DT_INT64], Tout=[DT_UINT8], token="pyfunc_13", _device="/job:localhost/replica:0/task:0/cpu:0"](histogram/h5/Classifier/fully_connected_2/mul_1_unstack/_191, histogram/h5/Tile_5_unstack)]]
2017-06-10 19:59:27.841002: W tensorflow/core/framework/op_kernel.cc:1152] Internal: Failed to run py callback pyfunc_13: see error log.
         [[Node: histogram/h5/Plot_0 = PyFunc[Tin=[DT_FLOAT, DT_INT64], Tout=[DT_UINT8], token="pyfunc_13", _device="/job:localhost/replica:0/task:0/cpu:0"](histogram/h5/Classifier/fully_connected_2/mul_1_unstack/_191, histogram/h5/Tile_5_unstack)]]
Traceback (most recent call last):
  File "trainer.py", line 219, in <module>
    main()
  File "trainer.py", line 216, in main
    trainer.train()
  File "trainer.py", line 122, in train
    self.run_single_step(self.batch_train, step=s, is_train=True)
  File "trainer.py", line 148, in run_single_step
    feed_dict=self.model.get_feed_dict(batch_chunk, step=step)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 778, in run
    run_metadata_ptr)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 982, in _run
    feed_dict_string, options, run_metadata)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1032, in _do_run
    target_list, options, run_metadata)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1052, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InternalError: Failed to run py callback pyfunc_13: see error log.
         [[Node: histogram/h5/Plot_0 = PyFunc[Tin=[DT_FLOAT, DT_INT64], Tout=[DT_UINT8], token="pyfunc_13", _device="/job:localhost/replica:0/task:0/cpu:0"](histogram/h5/Classifier/fully_connected_2/mul_1_unstack/_191, histogram/h5/Tile_5_unstack)]]
         [[Node: optimizer_loss/train/_202 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_2337_optimizer_loss/train", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

Caused by op u'histogram/h5/Plot_0', defined at:
  File "trainer.py", line 219, in <module>
    main()
  File "trainer.py", line 213, in main
    dataset_train, dataset_test)
  File "trainer.py", line 52, in __init__
    self.model = Model(config)
  File "/home/walter/task/Activations/model.py", line 46, in __init__
    self.build(is_train=is_train)
  File "/home/walter/task/Activations/model.py", line 127, in build
    collections=["plot_summaries"])
  File "/usr/local/lib/python2.7/dist-packages/tfplot/summary.py", line 78, in plot_many
    **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/tfplot/ops.py", line 126, in plot_many
    im = plot(plot_func, arg, name=('Plot_%d' % k), **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/tfplot/ops.py", line 73, in plot
    name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/script_ops.py", line 189, in py_func
    input=inp, token=token, Tout=Tout, name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_script_ops.py", line 40, in _py_func
    name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 768, in apply_op
    op_def=op_def)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2336, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1228, in __init__
    self._traceback = _extract_stack()

InternalError (see above for traceback): Failed to run py callback pyfunc_13: see error log.
         [[Node: histogram/h5/Plot_0 = PyFunc[Tin=[DT_FLOAT, DT_INT64], Tout=[DT_UINT8], token="pyfunc_13", _device="/job:localhost/replica:0/task:0/cpu:0"](histogram/h5/Classifier/fully_connected_2/mul_1_unstack/_191, histogram/h5/Tile_5_unstack)]]
         [[Node: optimizer_loss/train/_202 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_2337_optimizer_loss/train", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

Exception in thread Thread-2 (most likely raised during interpreter shutdown)```

Potential performance improvement using multiprocess

GIL sucks.

One alternative way to make it much faster would be to serialize the function body (what if it contains closure?) and execute the function in a multiprocess fashion (e.g. from a child process). This is quite tricky in general.

numpy.fromstring deprecation warning

I'm using tfplot to write a histogram figure to TensorBoard. If I import tensorflow_probability I get the following warning:

/usr/local/lib/python3.5/dist-packages/tfplot/figure.py:84: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
  img = np.fromstring(fig.canvas.tostring_argb(), dtype=np.uint8, sep='')

Curiously I'm not even using any packages from tensorflow_probability right now. But as soon as I import this module, I start getting this warning.

contrib

Provide off-the-shelf plotting utilities in tfplot.contrib package.

How to install tfplot in offline mode?

I used git clone to download the repository and run python setup.py, but it failed to install.
Since my server could not access to Internet, so I cannot use pip install.
Could anyone give me some suggestions?

Weird colors in tfplot images

screen shot 2017-08-08 at 11 21 19 am

screen shot 2017-08-08 at 11 22 24 am

screen shot 2017-08-08 at 11 21 48 am

screen shot 2017-08-08 at 11 22 33 am

The first two images are the original images, and the next two are the results of the following chunk of code. I'm not sure if this is a tfplot issue or something else, but I was wondering if you had any idea what could be causing the images to look like this. Thanks!

def plot_func(cx, cy, projected_points, image):
   fig = matplotlib.figure.Figure()
   ax = fig.add_subplot(111)
   ax.plot([cx, cx + projected_points[0][0]], [cy, cy + projected_points[0][1]], 'b', linewidth=3, zorder=1)
   ax.plot([cx, cx + projected_points[1][0]], [cy, cy + projected_points[1][1]], 'r', linewidth=3, zorder=1)
   ax.plot([cx, cx + projected_points[2][0]], [cy, cy + projected_points[2][1]], 'g', linewidth=3, zorder=1)
   ax.imshow(image)
   return fig

 img = tfplot.plot(plot_func, [cx, cy, projected_points, image])
 return tf.expand_dims(img, 0)
   
detected_poses = draw_pose(tf.squeeze(original_image, axis=0), detection_poses[top_index[0]], normalized_boxes[top_index[0]], tf.to_float(original_image_shape))
tf.summary.image('detected_poses', detected_poses)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.