Code Monkey home page Code Monkey logo

dfgn-pytorch's Introduction

DFGN-pytorch

A pytorch implementation of our ACL2019 paper (arXiv)

Dynamically Fused Graph Network for Multi-hop Reasoning
Yunxuan Xiao, Yanru Qu, Lin Qiu, Hao Zhou, Lei Li, Weinan Zhang, Yong Yu
Accepted by ACL 2019

This repo is still under construction. Currently, we have provided the core code of DFGN and pretrained checkpoints. Although the pre-processing part is not available now, we provide processed data for you to start training. Feel free to contact us if you have any questions.

Our result has been published on HotpotQA Leaderboard.

Requirements

python 3, pytorch 0.4.1, boto3

To install pytorch 0.4.1, you can follow the instruction on this page https://pytorch.org/get-started/previous-versions/. For exmaple install with CUDA 9 via anaconda:

conda install pytorch=0.4.1 cuda90 -c pytorch

Install boto3

pip install boto3

Download Data

Bert Models

Firstly, you should download and set bert pretrained model and vocabulary properly. You can find the download links in pytorch_pretrained_bert/modeling.py row 40-51, and pytorch_pretrained_bert/tokenization.py row 30-41. After you finish downloading, you should replace the dict value with your own local path accordingly.

Released Checkpoints

We also released our pretrained model for reproduction.

mkdir DFGN/ckpt
tar -xvzf ./DFGN-base.tar.gz -C DFGN/ckpt

Preprocessed Data

Next download our preprocessed train & dev data of HotpotQA distractor setting.

Extract all compressed files into DFGN/data folder.

cd DFGN-pytorch/DFGN
mkdir data
tar -xvzf ./data.tar.gz -C data
cd data
wget http://curtis.ml.cmu.edu/datasets/hotpot/hotpot_dev_distractor_v1.json

Also you can preprocess by yourself following the instructions in the next section. The official HotpotQA data is available in https://hotpotqa.github.io/.

Preprocess

Previously we provided intermediate data files for training DFGN. Now we published the code for preprocessing. The preprocessing phase consists of paragraph selection, named entity recognition, and graph construction.

First, download model checkpoints and save them in ./work_dir

Then run preprocess.sh as below, replacing ${TRAIN_FILE}, ${DEV_FILE} as the official train/dev file. You can finally get all preprocessed files in \work_dir\dev and \work_dir\train

CUDA_VISIBLE_DEVICES=0 bash preprocess.sh ${DEV_FILE} dev
CUDA_VISIBLE_DEVICES=0 bash preprocess.sh ${TRAIN_FILE} train

Training

To train a DFGN model, we need at least 2 GPUs (One for BERT encoding, one for DFGN model). Now training with default parameters:

cd DFGN
CUDA_VISIBLE_DEVICES=0,1 python train.py --name=YOUR_EXPNAME --q_update --q_attn --basicblock_trans --bfs_clf

If an OOM exception occurs, you may try to set a smaller batch size with gradient_accumulate_step > 1.

Your predictions and checkpoints in each epoch will be stored in ./output directory. By running local evaluation script, you may get results like this:

best iter em f1 pr re sp_em sp_f1 sp_pr sp_re jt_em jt_f1 jt_pr jt_re
epxx 0.5542 0.6909 0.7169 0.7039 0.5218 0.8196 0.8604 0.8098 0.3325 0.5942 0.6435 0.5993

Local Evaluation

There are two evaluation scripts here.

The first is the official evaluation script, which can evaluate a single prediction file.

python hotpot_evaluate_v1.py YOUR_PREDICTION data/hotpot_dev_distractor_v1.json

The second one can evaluate all predictions in a folder. For example you have predictions in output/submissions/YOUR_EXPNAME:

python hotpot_evaluate_all.py output/submissions/YOUR_EXPNAME data/hotpot_dev_distractor_v1.json

Inference using our released model

python predict.py
python hotpot_evaluate_v1.py output/submissions/prediction.json data/hotpot_dev_distractor_v1.json

You may get similar results like this:

{
'em': 0.5567859554355166,
'f1': 0.693802079009206,
'prec': 0.7207548475981969,
'recall': 0.7048612545455903,
'sp_em': 0.5311276164753544,
'sp_f1': 0.8223151063056721,
'sp_prec': 0.865363493135274,
'sp_recall': 0.8101753962895138,
'joint_em': 0.337744767049291,
'joint_f1': 0.5989142669137962,
'joint_prec': 0.6510258098492401,
'joint_recall': 0.6003632270835144
}

dfgn-pytorch's People

Contributors

woshiyyya 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

dfgn-pytorch's Issues

在将batchsize=8 gradient_accumulate_step=2时,模型效果会在某个epoch骤降,例如epoch16

image
ep11 0.5195 0.6570 0.6836 0.6691 0.4739 0.8070 0.8251 0.8201 0.2839 0.5560 0.5893 0.5750
ep12 0.5097 0.6451 0.6779 0.6520 0.4749 0.8023 0.8413 0.7968 0.2783 0.5428 0.5950 0.5458
ep13 0.5228 0.6593 0.6908 0.6678 0.4887 0.8089 0.8493 0.8016 0.2926 0.5593 0.6115 0.5624
ep14 0.5016 0.6384 0.6701 0.6471 0.4816 0.8009 0.8442 0.7907 0.2804 0.5390 0.5938 0.5396
ep15 0.4836 0.6173 0.6402 0.6341 0.4543 0.7882 0.8210 0.7894 0.2564 0.5140 0.5518 0.5294
ep16 0.0321 0.0326 0.0327 0.0330 0.0617 0.4420 0.5404 0.4246 0.0051 0.0193 0.0236 0.0182
ep17 0.4718 0.6070 0.6369 0.6188 0.4640 0.7954 0.8274 0.7955 0.2540 0.5077 0.5528 0.5177
ep18 0.0234 0.0614 0.0653 0.0884 0.0728 0.4275 0.5721 0.3758 0.0020 0.0311 0.0424 0.0374
ep19 0.0641 0.1104 0.1153 0.1312 0.0835 0.4011 0.5517 0.3408 0.0074 0.0566 0.0789 0.0568
ep20 0.1028 0.1568 0.1618 0.1744 0.1693 0.5481 0.6595 0.5117 0.0239 0.0990 0.1210 0.1038
ep21 0.0359 0.0678 0.0756 0.0782 0.4717 0.8048 0.8239 0.8183 0.0234 0.0583 0.0651 0.0684

关于数据处理的部分的问题

你好:
请问数据处理部分的代码大概什么时候会上传呀,自己看了一下有很多需要自己去预处理。 还有就是现在是其他部分最终版本了吗?

数据长度的问题

现在的max_seq_length是512,但是我看原始数据,一个问题下的所有paras拼接起来都是大于512的,按512截断的话,会不会把answer位置给截下来了?我看代码里超过512的只有截断,是吧?对于长度超过512的文本,有没有什么好方法处理一下?

The Requirement of CPU Memory

Hi, can you tell me what's the requirement of CPU memory to reproduce your codes? My cpu memory is 32GB. I just try to train the model, it will out ou my CPU memory when loading the third data(train_graph.pkl.gz). Can you help me solve it? Thank you very much.

关于gradient_accumulate_step

我设置一个更小的gradient_accumulate_step=5,仍然会有OOM的问题,如下。是GPU太小的问题吗?如果我用4个GPU该怎么分配呢,我在config里设置各分配两个,仍然会报错。
GPU
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... On | 00000000:00:06.0 Off | 0 |
| N/A 30C P0 28W / 250W | 11675MiB / 12198MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-PCIE... On | 00000000:00:08.0 Off | 0 |
| N/A 30C P0 29W / 250W | 7823MiB / 12198MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 21430 C python 11665MiB |
| 1 21430 C python 7813MiB |
+-----------------------------------------------------------------------------+

报错信息:
Avg-LOSS0/batch/step: 6.6137880611419675
Avg-LOSS1/batch/step: 3.8737828445434572
Avg-LOSS2/batch/step: 0.00037345796823501587
Avg-LOSS3/batch/step: 1.449139289855957
Avg-LOSS4/batch/step: 1.2904924607276917
100%|█████████████████████████████████████████| 962/962 [19:47<00:00, 1.06it/s]
1%|▎ | 2/232 [00:02<04:24, 1.15s/it]
Exception in thread Thread-5:
Traceback (most recent call last):
File "/nesi/nobackup/uoa02874/anaconda3/lib/python3.7/threading.py", line 926, in bootstrap_inner
self.run()
File "train.py", line 59, in run
join(args.prediction_path, 'pred_epoch
{}.json'.format(epc)))
File "train.py", line 122, in predict
start, end, sp, Type, softmask, ent, yp1, yp2 = model(batch, return_yp=True)
File "/home/zden658/.local/lib/python3.7/site-packages/torch/nn/modules/module.py", line 541, in call
result = self.forward(*input, **kwargs)
File "/scale_wlg_persistent/filesets/project/uoa02874/PycharmProjects/DFGN-pytorch-master/DFGN/model/GFN.py", line 59, in forward
input_state, entity_state, softmask = self.basicblocks[l](input_state, query_vec, batch)
File "/home/zden658/.local/lib/python3.7/site-packages/torch/nn/modules/module.py", line 541, in call
result = self.forward(*input, **kwargs)
File "/scale_wlg_persistent/filesets/project/uoa02874/PycharmProjects/DFGN-pytorch-master/DFGN/model/layers.py", line 245, in forward
entity_state = self.tok2ent(doc_state, entity_mapping, entity_length)
File "/home/zden658/.local/lib/python3.7/site-packages/torch/nn/modules/module.py", line 541, in call
result = self.forward(*input, **kwargs)
File "/scale_wlg_persistent/filesets/project/uoa02874/PycharmProjects/DFGN-pytorch-master/DFGN/model/layers.py", line 46, in forward
entity_states = entity_mapping.unsqueeze(3) * doc_state.unsqueeze(1) # N x E x L x d
RuntimeError: CUDA out of memory. Tried to allocate 1.17 GiB (GPU 0; 11.91 GiB total capacity; 5.55 GiB already allocated; 523.38 MiB free; 5.15 GiB cached)

测试集

测试集上测试的流程是怎样的呢?测试集和验证集的设置不同,有额外的预处理吗?测试集上测试的流程是怎样的呢?还是说直接用已经训练好的模型在predict.py进行测试呢?

关于论文中entity graph的一些问题?

  1. for every pair of entities appear in the same sentence in C (sentencelevel links);2. for every pair of entities with the same mention text in C (context-level links); and 3. between a central entity node and other entities within the same paragraph(paragraph-levellinks).
    作者你好,我想了解一下,第一个是只要在同一句子就加边,第二个和第三个加边的条件是什么意思?(可以用中文描述一下嘛?没看懂~~谢谢啦)

Results are slightly lower than these on paper

Thanks for your contributions. We trained the model with bert-base-uncased for 35 epochs, getting the results as follows:
{
'em': 0.5504,
'f1': 0.6899,
'prec': 0.7157,
'recall': 0.7034,
'sp_em': 0.4847,
'sp_f1': 0.8015,
'sp_prec': 0.8283,
'sp_recall': 0.8111,
'joint_em': 0.3072,
'joint_f1': 0.5809,
'joint_prec': 0.6186,
'joint_recall': 0.6001
}
which is slightly lower than these on readme and paper.
Any modification is not conducted in the project.
Are there any details we have ignored?

Test on codalab

您好,我在cadalab上测试时,指定使用GPU数量为1,但是报错Cannot assign enough resources: Requested more GPUs (1) than available (0 currently out of 1 on the machine)。请问您在测试时遇到过这个问题吗,如何解决呢

RuntimeError: CuDNN error: CUDNN_STATUS_SUCCESS

CUDA_VISIBLE_DEVICES=0,1 python train.py --name=YOUR_EXPNAME --q_update --q_attn --basicblock_trans --bfs_clf
报错:
...
loading data/dev_graph.pkl.gz
Traceback (most recent call last):
File "train.py", line 215 in
model.cuda(model_gpu)
File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 258, in cuda
return self._apply(lambda t: t.cuda(device))
File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 185, in _apply
module._apply(fn)
File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 185, in _apply
module._apply(fn)
File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 185, in _apply
module._apply(fn)
[Previous line repeated 1 more time]
File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 112, in _apply
self.flatten_parameters()
File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 105, in flatten_parameters
self.batch_first, bool(self.bidirection))
RuntimeError: CuDNN error: CUDNN_STATUS_SUCCESS

我的环境:python 3.6,pytorch 0.4.1,cuda 9.2, cudnn 7.6.5

数据预处理结果有问题

重新跑了一遍数据预处理,结果为EM/F1: 31.47/58.96,显著低于论文结果。用作者公布的预处理好的数据跑结果基本一致。

这个预处理的逻辑与作者公布的处理好的预处理数据使用的是同样的吗?

update: 训练不稳定,重跑一遍即可

How many graph edge types are used in implementation? 在实现中使用了多少种边类型?

According to the original paper, 3 types of edges are involved in graph. However, I found there is only one adjacent matrix in each sample in the pre-processed pickle, whose max value is 1, which means only ONE type of edge is involved in current version? Based on the implementation in GATSelfAttentionIntraMask of model/layers.py, the value of adjacent matrix should be regarded as an indicator of different edge types?
根据原始论文,使用的图中应该包含3种边类型。但是我发现在预处理的文件里面,每个样本只有一个邻接矩阵而且最大值为1,似乎意味着当前版本代码只使用了一种边类型?根据model/layers.py中的_GATSelfAttentionIntraMask_函数实现,邻接矩阵不同值的大小代表不同的边类型?

Inquiry about ‘nan’ in pickle file

Thanks for your excellent work. Some 'nan' occur in pkl file downloading from your google drive, but the final result is as good as you've declared. Accutually, I run some demos and extract bert embedding and find the absolute value in each dimension are mostly under 2 without 'nan'. How can thoses 'nan' effect the whole network, will it trigger the gradient explosion?

Why are results in readme lower than results in paper?

hi, I am confused that the results in readme are lower than results in paper. Are there any differences between the released code with your paper's experiments? Looking forward to your reply.

{
'em': 0.5567859554355166,
'f1': 0.693802079009206,
'prec': 0.7207548475981969,
'recall': 0.7048612545455903,
'sp_em': 0.5311276164753544,
'sp_f1': 0.8223151063056721,
'sp_prec': 0.865363493135274,
'sp_recall': 0.8101753962895138,
'joint_em': 0.337744767049291,
'joint_f1': 0.5989142669137962,
'joint_prec': 0.6510258098492401,
'joint_recall': 0.6003632270835144
}

input dataset

hi
why input data (hotpotqa) is in CSV format? original data is Json? how should I convert it?

the process is stop all the time,i can not solve this problem?

Exception in thread Thread-4:
Traceback (most recent call last):
File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "train.py", line 32, in run
context_encoding = large_batch_encode(self.bert, batch, encoder_gpus, args.max_bert_size)
File "train.py", line 78, in large_batch_encode
output_all_encoded_layers=False)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/parallel/data_parallel.py", line 121, in forward
return self.module(*inputs[0], **kwargs[0])
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/DFGN-pytorch-2/DFGN/pytorch_pretrained_bert/modeling.py", line 635, in forward
output_all_encoded_layers=output_all_encoded_layers)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/DFGN-pytorch-2/DFGN/pytorch_pretrained_bert/modeling.py", line 334, in forward
hidden_states = layer_module(hidden_states, attention_mask)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/DFGN-pytorch-2/DFGN/pytorch_pretrained_bert/modeling.py", line 319, in forward
attention_output = self.attention(hidden_states, attention_mask)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/DFGN-pytorch-2/DFGN/pytorch_pretrained_bert/modeling.py", line 279, in forward
self_output = self.self(input_tensor, attention_mask)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/DFGN-pytorch-2/DFGN/pytorch_pretrained_bert/modeling.py", line 230, in forward
mixed_query_layer = self.query(hidden_states)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in call
result = self.forward(*input, **kwargs)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/modules/linear.py", line 55, in forward
return F.linear(input, self.weight, self.bias)
File "/home/lrh/.virtualenvs/lrh/lib/python3.6/site-packages/torch/nn/functional.py", line 1026, in linear
output = input.matmul(weight.t())
RuntimeError: cublas runtime error : resource allocation failed at /pytorch/aten/src/THC/THCGeneral.cpp:333

预处理不完善

您好,想问一下数据预处理好多东西参数未获取?
1: 在read_hotpot_examples并没有对答案开始位置和结束位置进行判断,并且在返回example.orig_answer_text="",给的是空串,按理说应该获取。
2:在convert_examples_to_features函数中给出了转化答案空间的函数,但是并没有答案空间调用此函数处理答案。
以上两点让我认为不需要答案这个参数。但是紧接着在create_graph里面调用了examples[case.qas_id].orig_answer_text又获取了答案的文本,所以为什么前面分别是空串和没处理,是需要我们自己处理吗?
3:里面的其他的参数如支持事实、答案类型都给的是空串,都需要我们自己获取吗?

关于paragraphs selection的问题

您好,请问您的selector network中的paragraphs是测试集已经提供了10个吗?那是不是您的这个方法在fullwiki上并不能很好的先找到相关的段落呢?

数据预处理生成entity报错

我在数据预处理,生成bert_ner/predict.py生成entities文件的时候遇到了这样一个错误。请问这该怎么修改呢?
命令及报错如下:
root@5df95ab01abf:/workspace/pythonprogram_zm/DFGN_0915/bert_ner# python3 predict.py
Better speed can be achieved with apex installed from https://www.github.com/nvidia/apex.
loading data from: ../workdir/zm_out/dev_selected_paras1.json
58%|#########################################################################3 | 1330/2303 [20:45<16:18, 1.01s/it]Traceback (most recent call last):
File "predict.py", line 168, in
eval_para(model, eval_iter, eval_dataset.sent_id, args.output_path)
File "predict.py", line 82, in eval_para
for i, batch in enumerate(tqdm(iterator)):
File "/usr/local/lib/python3.5/dist-packages/tqdm/_tqdm.py", line 1005, in iter
for obj in iterable:
File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 560, in next
batch = self.collate_fn([self.dataset[i] for i in indices])
File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 560, in
batch = self.collate_fn([self.dataset[i] for i in indices])
File "/workspace/pythonprogram_zm/DFGN_0915/bert_ner/data_load.py", line 103, in getitem
assert len(words)==sum(is_heads)
AssertionError

文件predict.py参数设置如下:
parser.add_argument('--ckpt_path', type=str, default='../workdir/bert_ner.pt')
parser.add_argument('--input_path', type=str, default='../workdir/zm_out/dev_selected_paras1.json')
parser.add_argument('--output_path', type=str, default='../workdir/zm_out/entities.json')
parser.add_argument('--batch_size', type=int, default=32)
parser.add_argument('--use_query', action='store_true')

边类型

您好,您论文里面添加了多关系,但是代码并没有使用多关系,这虽然是一个可选项,但是我想问一下您是否调试过多关系的代码,最终在代码里没加是因为效果不好吗还是因为其它原因?

The problems of code.

sp_logits = self.sp_linear(sp_logits) # N x max_sent x 1
sp_logits_aux = Variable(sp_logits.data.new(sp_logits.size(0), sp_logits.size(1), 1).zero_())
sp_prediction = torch.cat([sp_logits_aux, sp_logits], dim=-1).contiguous() # N x max_sent x 2
您好,我想问一下第二行是否可以等价为torch.zero_like(sp_logits),因为Variable在pytorch 0.4基本不咋用?其次第三行拼接的意义是什么,为什么这样拼接?谢谢。

关于GNN的框架

您好,我在刚入门GNN,我发现好像目前存在两个关于GNN的框架DGI和PyG,但好像您并没有使用,能问一下是为什么吗?

soft mask使用的位置

您好,首先谢谢您的工作!
在论文中,得到soft mask mt之后,将其与entity state相乘得到 带尾巴的E(t-1),然后使用这个 带尾巴的E(t-1) 去进行GNN的传播。
但是我发现在代码里面,在进行GNN传播时,使用的是 还没有和soft mask(在代码里是adj_mask, 在layers.py的125行得到)相乘的entity state(GNN传播代码在layers.py的127到145行)。在进行完GNN传播之后,才用soft mask去更新entity state(layers.py的148到149行)。请问这个计算顺序是不是有点问题?
谢谢您!

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.