Coder Social home page Coder Social logo

difflogic's People

Contributors

felix-petersen avatar julianwelzel avatar mahdizaferanchi 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

difflogic's Issues

suggest paper DeepLogic

http://mn.cs.tsinghua.edu.cn/xinwang/PDF/papers/2022_DeepLogic%20Joint%20Learning%20of%20Neural%20Perception%20and%20Logical%20Reasoning.pdf

DeepLogic: Joint Learning of Neural Perception
and Logical Reasoning
Xuguang Duan,Xin Wang, Member, IEEE, Peilin Zhao,Guangyao Shen,Wenwu Zhu, Fellow, IEEE
Abstract—Neural-symbolic learning, aiming to combine the perceiving power of neural perception and the reasoning power of symbolic
logic together, has drawn increasing research attention. However, existing works simply cascade the two components together and
optimize them isolatedly, failing to utilize the mutual enhancing information between them. To address this problem, we propose
DeepLogic, a framework with joint learning of neural perception and logical reasoning, such that these two components are jointly
optimized through mutual supervision signals. In particular, the proposed DeepLogic framework contains a deep-logic module that is
capable of representing complex first-order-logic formulas in a tree structure with basic logic operators. We then theoretically quantify the
mutual supervision signals and propose the deep&logic optimization algorithm for joint optimization. We further prove the convergence of
DeepLogic and conduct extensive experiments on model performance, convergence, and generalization, as well as its extension to the
continuous domain. The experimental results show that through jointly learning both perceptual ability and logic formulas in a weakly
supervised manner, our proposed DeepLogic framework can significantly outperform DNN-based baselines by a great margin and beat
other strong baselines without out-of-box tools.

--packbits_eval error

python experiments/main.py -bs 100 -t 10 --dataset mnist20x20 -ni 200_0 -ef 1_000 -k 8_000 -l 6 --packbits_eval

Traceback (most recent call last):
File "experiments/main.py", line 313, in
r['train_acc_eval'] = packbits_eval(model, train_loader)
File "experiments/main.py", line 203, in packbits_eval
[
File "experiments/main.py", line 204, in
(model(PackBitsTensor(x.to('cuda').round().bool())).argmax(-1) == y.to('cuda')).to(torch.float32).mean().item()
File "/home/jz/github/difflogic/difflogic/packbitstensor.py", line 8, in init
assert len(t.shape) == 2, t.shape
AssertionError: torch.Size([100, 1, 20, 20])

Cannot install the package

I cannot install the package via ‘pip install difflogic’.

WARNING: Ignoring invalid distribution -rllib3 (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ix (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -hreadpoolctl (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ensorflow (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -cipy (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -rllib3 (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ix (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -hreadpoolctl (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ensorflow (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -cipy (/share/apps/anaconda3/lib/python3.8/site-packages)
Collecting difflogic
Downloading difflogic-0.1.0.tar.gz (21 kB)
Requirement already satisfied: torch>=1.6.0 in /share/apps/anaconda3/lib/python3.8/site-packages (from difflogic) (1.10.1+cu113)
Requirement already satisfied: numpy in /share/apps/anaconda3/lib/python3.8/site-packages (from difflogic) (1.22.4)
Requirement already satisfied: typing-extensions in /share/apps/anaconda3/lib/python3.8/site-packages (from torch>=1.6.0->difflogic) (4.4.0)
Building wheels for collected packages: difflogic
Building wheel for difflogic (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /share/apps/anaconda3/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py'"'"'; file='"'"'/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-3v72d69e
cwd: /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/
Complete output (106 lines):
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.8
creating build/lib.linux-x86_64-3.8/difflogic
copying difflogic/difflogic.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/compiled_model.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/init.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/functional.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/packbitstensor.py -> build/lib.linux-x86_64-3.8/difflogic
running build_ext
/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py:782: UserWarning: The detected CUDA version (11.4) has a minor version mismatch with the version that was used to compile PyTorch (11.3). Most likely this shouldn't be a problem.
warnings.warn(CUDA_MISMATCH_WARN.format(cuda_str_version, torch.version.cuda))
building 'difflogic_cuda' extension
creating /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8
creating /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic
creating /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda
/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py:295: UserWarning:

                             !! WARNING !!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) is not compatible with the compiler Pytorch was
built with for this platform, which is g++ on linux. Please
use g++ to to compile your extension. Alternatively, you may
compile PyTorch from source using c++, and then you can also use
c++ to compile your extension.

See https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md for help
with compiling PyTorch from source.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                            !! WARNING !!

warnings.warn(WRONG_COMPILER_WARNING.format(

Emitting ninja build file /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/build.ninja...
Compiling objects...
Allowing ninja to set a default number of workers... (overridable by setting the environment variable MAX_JOBS=N)
[1/2] /share/apps/cuda-11.4/bin/nvcc -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/TH -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/THC -I/share/apps/cuda-11.4/include -I/share/apps/anaconda3/include/python3.8 -c -c /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/difflogic/cuda/difflogic_kernel.cu -o /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic_kernel.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -lineinfo -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="gcc"' '-DPYBIND11_STDLIB="libstdcpp"' '-DPYBIND11_BUILD_ABI="cxxabi1011"' -DTORCH_EXTENSION_NAME=difflogic_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_75,code=compute_75 -gencode=arch=compute_75,code=sm_75 -std=c++14
FAILED: /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic_kernel.o
/share/apps/cuda-11.4/bin/nvcc -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/TH -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/THC -I/share/apps/cuda-11.4/include -I/share/apps/anaconda3/include/python3.8 -c -c /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/difflogic/cuda/difflogic_kernel.cu -o /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic_kernel.o -D__CUDA_NO_HALF_OPERATORS
-D__CUDA_NO_HALF_CONVERSIONS
_ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -lineinfo -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=difflogic_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_75,code=compute_75 -gencode=arch=compute_75,code=sm_75 -std=c++14
gcc: fatal error: cannot execute 'cc1plus': execvp: No such file or directory
compilation terminated.
nvcc fatal : Failed to preprocess host compiler properties.
[2/2] c++ -MMD -MF /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic.o.d -pthread -B /share/apps/anaconda3/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/TH -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/THC -I/share/apps/cuda-11.4/include -I/share/apps/anaconda3/include/python3.8 -c -c /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/difflogic/cuda/difflogic.cpp -o /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic.o -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=difflogic_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1717, in _run_ninja_build
subprocess.run(
File "/share/apps/anaconda3/lib/python3.8/subprocess.py", line 516, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py", line 7, in
setup(
File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/init.py", line 153, in setup
return distutils.core.setup(**attrs)
File "/share/apps/anaconda3/lib/python3.8/distutils/core.py", line 148, in setup
dist.run_commands()
File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/share/apps/anaconda3/lib/python3.8/site-packages/wheel/bdist_wheel.py", line 299, in run
self.run_command('build')
File "/share/apps/anaconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/share/apps/anaconda3/lib/python3.8/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/share/apps/anaconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 79, in run
_build_ext.run(self)
File "/share/apps/anaconda3/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 186, in run
_build_ext.build_ext.run(self)
File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 340, in run
self.build_extensions()
File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 735, in build_extensions
build_ext.build_extensions(self)
File "/share/apps/anaconda3/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 195, in build_extensions
_build_ext.build_ext.build_extensions(self)
File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 449, in build_extensions
self._build_extensions_serial()
File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 474, in _build_extensions_serial
self.build_extension(ext)
File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 202, in build_extension
_build_ext.build_extension(self, ext)
File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 528, in build_extension
objects = self.compiler.compile(sources,
File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 556, in unix_wrap_ninja_compile
_write_ninja_file_and_compile_objects(
File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1399, in _write_ninja_file_and_compile_objects
_run_ninja_build(
File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1733, in _run_ninja_build
raise RuntimeError(message) from e
RuntimeError: Error compiling objects for extension

ERROR: Failed building wheel for difflogic
Running setup.py clean for difflogic
Failed to build difflogic
WARNING: Ignoring invalid distribution -rllib3 (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ix (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -hreadpoolctl (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ensorflow (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -cipy (/share/apps/anaconda3/lib/python3.8/site-packages)
Installing collected packages: difflogic
Running setup.py install for difflogic ... error
ERROR: Command errored out with exit status 1:
command: /share/apps/anaconda3/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py'"'"'; file='"'"'/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-644wjaxj/install-record.txt --single-version-externally-managed --compile --install-headers /share/apps/anaconda3/include/python3.8/difflogic
cwd: /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/
Complete output (108 lines):
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.8
creating build/lib.linux-x86_64-3.8/difflogic
copying difflogic/difflogic.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/compiled_model.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/init.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/functional.py -> build/lib.linux-x86_64-3.8/difflogic
copying difflogic/packbitstensor.py -> build/lib.linux-x86_64-3.8/difflogic
running build_ext
/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py:782: UserWarning: The detected CUDA version (11.4) has a minor version mismatch with the version that was used to compile PyTorch (11.3). Most likely this shouldn't be a problem.
warnings.warn(CUDA_MISMATCH_WARN.format(cuda_str_version, torch.version.cuda))
building 'difflogic_cuda' extension
creating /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8
creating /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic
creating /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda
/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py:295: UserWarning:

                               !! WARNING !!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (c++) is not compatible with the compiler Pytorch was
built with for this platform, which is g++ on linux. Please
use g++ to to compile your extension. Alternatively, you may
compile PyTorch from source using c++, and then you can also use
c++ to compile your extension.

See https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md for help
with compiling PyTorch from source.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                              !! WARNING !!

  warnings.warn(WRONG_COMPILER_WARNING.format(
Emitting ninja build file /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/build.ninja...
Compiling objects...
Allowing ninja to set a default number of workers... (overridable by setting the environment variable MAX_JOBS=N)
[1/2] /share/apps/cuda-11.4/bin/nvcc  -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/TH -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/THC -I/share/apps/cuda-11.4/include -I/share/apps/anaconda3/include/python3.8 -c -c /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/difflogic/cuda/difflogic_kernel.cu -o /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic_kernel.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -lineinfo -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=difflogic_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_75,code=compute_75 -gencode=arch=compute_75,code=sm_75 -std=c++14
FAILED: /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic_kernel.o
/share/apps/cuda-11.4/bin/nvcc  -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/TH -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/THC -I/share/apps/cuda-11.4/include -I/share/apps/anaconda3/include/python3.8 -c -c /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/difflogic/cuda/difflogic_kernel.cu -o /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic_kernel.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -lineinfo -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=difflogic_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_75,code=compute_75 -gencode=arch=compute_75,code=sm_75 -std=c++14
gcc: fatal error: cannot execute 'cc1plus': execvp: No such file or directory
compilation terminated.
nvcc fatal   : Failed to preprocess host compiler properties.
[2/2] c++ -MMD -MF /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic.o.d -pthread -B /share/apps/anaconda3/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/TH -I/share/apps/anaconda3/lib/python3.8/site-packages/torch/include/THC -I/share/apps/cuda-11.4/include -I/share/apps/anaconda3/include/python3.8 -c -c /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/difflogic/cuda/difflogic.cpp -o /tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/build/temp.linux-x86_64-3.8/difflogic/cuda/difflogic.o -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=difflogic_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
  File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1717, in _run_ninja_build
    subprocess.run(
  File "/share/apps/anaconda3/lib/python3.8/subprocess.py", line 516, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py", line 7, in <module>
    setup(
  File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/__init__.py", line 153, in setup
    return distutils.core.setup(**attrs)
  File "/share/apps/anaconda3/lib/python3.8/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/command/install.py", line 61, in run
    return orig.install.run(self)
  File "/share/apps/anaconda3/lib/python3.8/distutils/command/install.py", line 545, in run
    self.run_command('build')
  File "/share/apps/anaconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/share/apps/anaconda3/lib/python3.8/distutils/command/build.py", line 135, in run
    self.run_command(cmd_name)
  File "/share/apps/anaconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/share/apps/anaconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 79, in run
    _build_ext.run(self)
  File "/share/apps/anaconda3/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 186, in run
    _build_ext.build_ext.run(self)
  File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 340, in run
    self.build_extensions()
  File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 735, in build_extensions
    build_ext.build_extensions(self)
  File "/share/apps/anaconda3/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 195, in build_extensions
    _build_ext.build_ext.build_extensions(self)
  File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 449, in build_extensions
    self._build_extensions_serial()
  File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 474, in _build_extensions_serial
    self.build_extension(ext)
  File "/share/apps/anaconda3/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 202, in build_extension
    _build_ext.build_extension(self, ext)
  File "/share/apps/anaconda3/lib/python3.8/distutils/command/build_ext.py", line 528, in build_extension
    objects = self.compiler.compile(sources,
  File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 556, in unix_wrap_ninja_compile
    _write_ninja_file_and_compile_objects(
  File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1399, in _write_ninja_file_and_compile_objects
    _run_ninja_build(
  File "/share/apps/anaconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1733, in _run_ninja_build
    raise RuntimeError(message) from e
RuntimeError: Error compiling objects for extension
----------------------------------------

ERROR: Command errored out with exit status 1: /share/apps/anaconda3/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py'"'"'; file='"'"'/tmp/pip-install-2kdyj6yz/difflogic_5e93d0b6e91c4072903ae9977bcff83b/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-644wjaxj/install-record.txt --single-version-externally-managed --compile --install-headers /share/apps/anaconda3/include/python3.8/difflogic Check the logs for full command output.
WARNING: Ignoring invalid distribution -rllib3 (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ix (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -hreadpoolctl (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ensorflow (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -cipy (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -rllib3 (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ix (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -hreadpoolctl (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ensorflow (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -cipy (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -rllib3 (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ix (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -hreadpoolctl (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -ensorflow (/share/apps/anaconda3/lib/python3.8/site-packages)
WARNING: Ignoring invalid distribution -cipy (/share/apps/anaconda3/lib/python3.8/site-packages)

Remove CUDA requirement

In the README you say that there is a Pytorch implementation and a CUDA implementation, which is faster. I don't have a GPU and I'm fine waiting a few minutes for the training to complete on the CPU. Is it possible to remove the CUDA requirement for installation if I only use the Python+CPU implementation?

Cannot run due to installation issues

Hello! :)

First of all, really cool paper!! I wish to use it, but there are some installation issues.

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
pip install difflogic

I get the output:

$ pip install --upgrade difflogic
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: difflogic in /home/filco306/.local/lib/python3.8/site-packages (0.0.0)
Collecting difflogic
  Using cached difflogic-0.1.0.tar.gz (21 kB)
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2fbg7kd4/difflogic_f249148a2c3347d280f1fab1669b0e7c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-2fbg7kd4/difflogic_f249148a2c3347d280f1fab1669b0e7c/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-zybeuryc
         cwd: /tmp/pip-install-2fbg7kd4/difflogic_f249148a2c3347d280f1fab1669b0e7c/
    Complete output (11 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-2fbg7kd4/difflogic_f249148a2c3347d280f1fab1669b0e7c/setup.py", line 28, in <module>
        ext_modules=[CUDAExtension('difflogic_cuda', [
      File "/home/filco306/.local/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 983, in CUDAExtension
        library_dirs += library_paths(cuda=True)
      File "/home/filco306/.local/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1098, in library_paths
        if (not os.path.exists(_join_cuda_home(lib_dir)) and
      File "/home/filco306/.local/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 2125, in _join_cuda_home
        raise EnvironmentError('CUDA_HOME environment variable is not set. '
    OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/9c/18/e7ee8ec8a895f000411853174636f6a90480076da43ca3df40e1e4875fcc/difflogic-0.1.0.tar.gz#sha256=979ce845a494bdf8ebeeb94d61f3bbf1ae018257ee5b048f936567b53fc115a1 (from https://pypi.org/simple/difflogic/) (requires-python:>=3.6). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
Requirement already satisfied: numpy in /home/filco306/.local/lib/python3.8/site-packages (from difflogic) (1.22.0)
Requirement already satisfied: torch>=1.9.0 in /home/filco306/.local/lib/python3.8/site-packages (from difflogic) (1.12.1+cu113)
Requirement already satisfied: typing-extensions in /home/filco306/.local/lib/python3.8/site-packages (from torch>=1.9.0->difflogic) (3.10.0.0)
WARNING: Error parsing requirements for jupyter: [Errno 2] No such file or directory: '/home/filco306/.local/lib/python3.8/site-packages/jupyter-1.0.0.dist-info/METADATA'
WARNING: You are using pip version 21.2.4; however, version 22.3.1 is available.
You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.

Would you know what the issue is? Thank you in advance!

import difflogic_cuda

Hello.
I would like to re-produce the result and I have followed the readme file.
However, after I run the code, it said there is no module called difflogic_cuda.

I went over the source codes and I did not find any file with such name.

Any ideas?
image

Bug with `PackBitsTensor` class

When batch size isn't a multiple of bit_count, I'm pretty certain the result of PackBitsTensor is incorrect.

I trained a model on the monk dataset and the accuracy drops significantly when testing using PackBitsTensor for inference. I suspect the issue is less pronounced for higher dimensional data and could be missed.

I fixed this in my PR.

Support Problem:RuntimeError

When I meet the following requirement:
:~/difflogic/experiments$ pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html # CUDA version 11.3
Looking in links: https://download.pytorch.org/whl/torch_stable.html
Requirement already satisfied: torch==1.12.1+cu113 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (1.12.1+cu113)
Requirement already satisfied: torchvision==0.13.1+cu113 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (0.13.1+cu113)
Requirement already satisfied: typing-extensions in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from torch==1.12.1+cu113) (4.3.0)
Requirement already satisfied: requests in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from torchvision==0.13.1+cu113) (2.28.1)
Requirement already satisfied: numpy in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from torchvision==0.13.1+cu113) (1.21.5)
Requirement already satisfied: pillow!=8.3.,>=5.3.0 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from torchvision==0.13.1+cu113) (9.4.0)
Requirement already satisfied: charset-normalizer<3,>=2 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from requests->torchvision==0.13.1+cu113) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from requests->torchvision==0.13.1+cu113) (2022.12.7)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from requests->torchvision==0.13.1+cu113) (1.26.14)
Requirement already satisfied: idna<4,>=2.5 in /home/anaconda3/envs/logicnet/lib/python3.7/site-packages (from requests->torchvision==0.13.1+cu113) (3.4)

But I encounter the following errors when I run the main.py:
:~/difflogic/experiments$ python main.py --dataset mnist -k 500 -l 4
{'experiment_id': None, 'dataset': 'mnist', 'tau': 10, 'seed': 0, 'batch_size': 128, 'learning_rate': 0.01, 'training_bit_count': 32, 'implementation': 'cuda', 'packbits_eval': False, 'compile_model': False, 'num_iterations': 100000, 'eval_freq': 2000, 'valid_set_size': 0.0, 'extensive_eval': False, 'connections': 'unique', 'architecture': 'randomly_connected', 'num_neurons': 500, 'num_layers': 4, 'grad_factor': 1.0}
total_num_neurons=1500
total_num_weights=1500
Sequential(
(0): Flatten(start_dim=1, end_dim=-1)
(1): LogicLayer(784, 500, train)
(2): LogicLayer(500, 500, train)
(3): LogicLayer(500, 500, train)
(4): LogicLayer(500, 500, train)
(5): GroupSum(k=10, tau=10)
)
iteration: 0%| | 0/100000 [00:00<?, ?it/s]
Traceback (most recent call last):
File "main.py", line 288, in
loss = train(model, x, y, loss_fn, optim)
File "main.py", line 175, in train
x = model(x)
File "/home/anaconda3/envs/logicnet/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
return forward_call(*input, **kwargs)
File "/home/anaconda3/envs/logicnet/lib/python3.7/site-packages/torch/nn/modules/container.py", line 139, in forward
input = module(input)
File "/home/anaconda3/envs/logicnet/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
return forward_call(input, **kwargs)
File "/home/anaconda3/envs/logicnet/lib/python3.7/site-packages/difflogic/difflogic.py", line 88, in forward
return self.forward_cuda(x)
File "/home/anaconda3/envs/logicnet/lib/python3.7/site-packages/difflogic/difflogic.py", line 125, in forward_cuda
x, a, b, w, self.given_x_indices_of_y_start, self.given_x_indices_of_y
File "/home/anaconda3/envs/logicnet/lib/python3.7/site-packages/difflogic/difflogic.py", line 209, in forward
return difflogic_cuda.forward(x, a, b, w)
RuntimeError: Unrecognized tensor type ID: PythonTLSSnapshot

Resume training

Hi, thank you for sharing this repo. I would like to know if it's possible to resume training from a checkpoint.

"Patent pending"

What does this mean in terms of use in an open source or commercial product?
This is confusing given that the repo is MIT.

Convert float input to bool in C

I exported the C code for a model I trained on a float dataset. The generated function signature is

void apply_logic_gate_net (bool const *inp, int *out, size_t len)

How do I convert my float input to a boolean one to call this function?

Bit function variant of Universal Approximation Theorem

Hi,

Edit: fix operation names (XOR -> EQ)

Thanks for your great work on DiffLogic. Not sure if this is the right place to discuss, but I think DiffLogic is underrated.

In "C.3 Ternary and Other Additional Operators", you discuss about generalizing 2-to-1 bit functions into n-to-1 bit functions, I believe it leads to a bit function variant of the Universal Approximation Theorem through DiffLogic.

Consider paraphrasing and generalizing the difflogic operator with the following insights:

  • Any arbitrary n-to-1 bit function is essentially a Look-Up Table (LUT) with n input address bits and 2^n constant scalar values.
  • The combinational logic circuit of a LUT essentially implements a selective weighted sum over potential candidate values in the table, where only the 'selected address' carries a nonzero weight.
  • This 'selected address' is effectively activated by a product of the outputs from a bitwise EQ operation comparing an LUT address with the input address bit by bit.

For clarity, denote the following notation:

  • Vectors are denoted by uppercase letters, e.g., X represents a vector.
  • k-th input within the dataset, which are vectors themselves, are indicated by a uppercase letter with a subscript, e.g., X_k refers to the input side of the k-th training data point.
  • Scalar Entries within a vector are denoted by lowercase letters with a subscript, e.g., x_i signifies the i-th entry of vector X.

Given any ground truth bit function g:

  • Assume the input address bit vector as X, or [x_1, x_2, ..., x_n].
  • Assume the constant vector representing the LUT data entries as C, or [c_0, c_1, c_2, ..., c_{2^n-1}]. Alternatively, each scalar value c_i can also be denoted in binary indices like c_{0...00}, ..., c{1...11}.

Then, using our insight from the LUT, the function g can be formulated as:

(1)
g definition

Here, EQSwitch is defined by:

EQSwitch

while b_{ij} indicates the j-th bit in the binary enumeration of index i, clarifying whether x_j is to be negated or preserved as per the EQSwitch logic.

Following the concepts introduced in your paper, we can construct a differential, learnable function f by relaxing C to a parameterized real-valued vector W within [0, 1]^(2^n):

(2)
f definition

What's interesting is that when considering MSE loss, we can demonstrate that the loss function with respect to the adjustable parameters W is convex.

We can start by defining the loss function for a single data point on input X_k as:
loss(X_k; W) = (f(X_k; W) - g(X_k; C))^2.

  • Since the input address X_k is fixed and the LUT represents a constant table, g must be a constant.
  • From formula (2), we have f is a weighted sum of w_i; in other words, f is a linear map from the vector W to a real value.

Let h(;W) = f(;W) - g. Given that g is a constant, it follows that h is also a linear map from the vector W to a real value.

Then we can prove loss(;W) = h(;W)^2 is convex, because:

When we consider Loss(W) for the entire training dataset as the sum of loss(X_k; W) over every single data point, we can deduce that Loss(W) is also convex, because the sum of convex functions is also convex.

This means that any arbitrary n-to-1 bit function can be learned by a unified difflogic framework when considering MSE loss.

Given the nature of n-to-m bit functions, which can be constructed by concatenating the outputs of m independent n-to-1 bit functions, it also means that any arbitrary n-to-m bit function is learnable by the DiffLogic framework.

In other words, DiffLogic is probably very underrated. Every widely used network architecture implemented by matrix multiplication today might be able to be reimplemented in DiffLogic, which potentially leads to remarkable performance acceleration during inference time, as you demonstrated in the MNIST experiment.

I presume the conclusion holds true when considering other loss functions like cross-entropy; however, I'm unsure of the difficulty in proving it.
Edit: I believe the convexity of applying cross-entropy loss on the generalized DiffLogic operator can be proved in a similar way, details omitted.

I hope you find the argument interesting, and I look forward to further developments in DiffLogic.

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.