Git Product home page Git Product logo

Comments (12)

Pattio avatar Pattio commented on May 30, 2024

Hey, I would suggest to either downgrade Python or try to play around with scikit-learn version in requirements.txt, see scikit-learn-contrib/hdbscan#457 for reference. I hope, that helps 🤞

from deepswarm.

Billnewgate327 avatar Billnewgate327 commented on May 30, 2024

After I had solved the problem, ran the example -----> cifar10.py, and get following error:

Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 78s 0us/step
-------------------------------DeepSwarm settings-------------------------------
{
"DeepSwarm": {
"aco": {
"ant_count": 16,
"greediness": 0.5,
"pheromone": {
"decay": 0.1,
"evaporation": 0.1,
"start": 0.1,
"verbose": false
}
},
"backend": {
"batch_size": 64,
"epochs": 15,
"loss": "sparse_categorical_crossentropy",
"patience": 5,
"verbose": false
},
"flat_nodes": [
"FlattenNode",
"DenseNode",
"DropoutFlatNode",
"BatchNormalizationFlatNode"
],
"max_depth": 15,
"metrics": "accuracy",
"reuse_patience": 1,
"save_folder": null,
"spatial_nodes": [
"InputNode",
"Conv2DNode",
"DropoutSpatialNode",
"BatchNormalizationNode",
"Pool2DNode"
]
},
"Nodes": {
"BatchNormalizationFlatNode": {
"attributes": {},
"transitions": {
"DenseNode": 1.1,
"DropoutFlatNode": 1.1,
"OutputNode": 0.9
},
"type": "BatchNormalization"
},
"BatchNormalizationNode": {
"attributes": {},
"transitions": {
"Conv2DNode": 1.1,
"DropoutSpatialNode": 1.0,
"FlattenNode": 1.0,
"Pool2DNode": 1.1
},
"type": "BatchNormalization"
},
"Conv2DNode": {
"attributes": {
"activation": [
"ReLU"
],
"filter_count": [
32,
64,
128
],
"kernel_size": [
1,
3,
5
]
},
"transitions": {
"BatchNormalizationNode": 1.2,
"Conv2DNode": 0.8,
"DropoutSpatialNode": 1.1,
"FlattenNode": 1.0,
"Pool2DNode": 1.2
},
"type": "Conv2D"
},
"DenseNode": {
"attributes": {
"activation": [
"ReLU",
"Sigmoid"
],
"output_size": [
64,
128
]
},
"transitions": {
"BatchNormalizationFlatNode": 1.2,
"DenseNode": 0.8,
"DropoutFlatNode": 1.2,
"OutputNode": 1.0
},
"type": "Dense"
},
"DropoutFlatNode": {
"attributes": {
"rate": [
0.1,
0.3
]
},
"transitions": {
"BatchNormalizationFlatNode": 1.0,
"DenseNode": 1.0,
"OutputNode": 0.9
},
"type": "Dropout"
},
"DropoutSpatialNode": {
"attributes": {
"rate": [
0.1,
0.3
]
},
"transitions": {
"BatchNormalizationNode": 1.1,
"Conv2DNode": 1.1,
"FlattenNode": 1.0,
"Pool2DNode": 1.0
},
"type": "Dropout"
},
"FlattenNode": {
"attributes": {},
"transitions": {
"BatchNormalizationFlatNode": 0.9,
"DenseNode": 1.0,
"OutputNode": 0.8
},
"type": "Flatten"
},
"InputNode": {
"attributes": {
"shape": [
[
28,
28,
1
]
]
},
"transitions": {
"Conv2DNode": 1.0
},
"type": "Input"
},
"OutputNode": {
"attributes": {
"activation": [
"Softmax"
],
"output_size": [
10
]
},
"transitions": {},
"type": "Output"
},
"Pool2DNode": {
"attributes": {
"pool_size": [
2
],
"pool_type": [
"max",
"average"
],
"stride": [
2,
3
]
},
"transitions": {
"BatchNormalizationNode": 1.1,
"Conv2DNode": 1.1,
"FlattenNode": 1.0
},
"type": "Pool2D"
}
},
"script": "ipykernel_launcher.py",
"settings_file": "C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\DeepSwarm-master\settings\default.yaml"
}
------------------------------STARTING ACO SEARCH-------------------------------

ValueError Traceback (most recent call last)
in
24 deepswarm = DeepSwarm(backend=backend)
25 # Find the topology for a given dataset
---> 26 topology = deepswarm.find_topology()
27 # Evaluate discovered topology
28 deepswarm.evaluate_topology(topology)

~\AppData\Local\Programs\Python\Python38\Scripts\DeepSwarm-master\deepswarm\deepswarm.py in find_topology(self)
43 self.aco = ACO(backend=self.backend, storage=self.storage)
44
---> 45 best_ant = self.aco.search()
46 best_model = self.storage.load_specified_model(self.backend, best_ant.path_hash)
47 return best_model

~\AppData\Local\Programs\Python\Python38\Scripts\DeepSwarm-master\deepswarm\aco.py in search(self)
30 Log.header("STARTING ACO SEARCH", type="GREEN")
31 self.best_ant = Ant(self.graph.generate_path(self.random_select))
---> 32 self.best_ant.evaluate(self.backend, self.storage)
33 Log.info(self.best_ant)
34 else:

~\AppData\Local\Programs\Python\Python38\Scripts\DeepSwarm-master\deepswarm\aco.py in evaluate(self, backend, storage)
248
249 # Train model
--> 250 new_model = backend.train_model(new_model)
251 # Evaluate model
252 self.loss, self.accuracy = backend.evaluate_model(new_model)

~\AppData\Local\Programs\Python\Python38\Scripts\DeepSwarm-master\deepswarm\backends.py in train_model(self, model)
270
271 # Train model
--> 272 model.fit(**fit_parameters)
273
274 # Load model from checkpoint

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
1098 _r=1):
1099 callbacks.on_train_batch_begin(step)
-> 1100 tmp_logs = self.train_function(iterator)
1101 if data_handler.should_sync:
1102 context.async_wait()

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\def_function.py in call(self, *args, **kwds)
826 tracing_count = self.experimental_get_tracing_count()
827 with trace.Trace(self._name) as tm:
--> 828 result = self._call(*args, **kwds)
829 compiler = "xla" if self._experimental_compile else "nonXla"
830 new_tracing_count = self.experimental_get_tracing_count()

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds)
869 # This is the first call of call, so we have to initialize.
870 initializers = []
--> 871 self._initialize(args, kwds, add_initializers_to=initializers)
872 finally:
873 # At this point we know that the initialization is complete (or less

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\def_function.py in _initialize(self, args, kwds, add_initializers_to)
723 self._graph_deleter = FunctionDeleter(self._lifted_initializer_graph)
724 self._concrete_stateful_fn = (
--> 725 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access
726 *args, **kwds))
727

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs)
2967 args, kwargs = None, None
2968 with self._lock:
-> 2969 graph_function, _ = self._maybe_define_function(args, kwargs)
2970 return graph_function
2971

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs)
3359
3360 self._function_cache.missed.add(call_context_key)
-> 3361 graph_function = self._create_graph_function(args, kwargs)
3362 self._function_cache.primary[cache_key] = graph_function
3363

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes)
3194 arg_names = base_arg_names + missing_arg_names
3195 graph_function = ConcreteFunction(
-> 3196 func_graph_module.func_graph_from_py_func(
3197 self._name,
3198 self._python_function,

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)
988 _, original_func = tf_decorator.unwrap(python_func)
989
--> 990 func_outputs = python_func(*func_args, **func_kwargs)
991
992 # invariant: func_outputs contains only Tensors, CompositeTensors,

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds)
632 xla_context.Exit()
633 else:
--> 634 out = weak_wrapped_fn().wrapped(*args, **kwds)
635 return out
636

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs)
975 except Exception as e: # pylint:disable=broad-except
976 if hasattr(e, "ag_error_metadata"):
--> 977 raise e.ag_error_metadata.to_exception(e)
978 else:
979 raise

ValueError: in user code:

C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\training.py:805 train_function  *
    return step_function(self, iterator)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\training.py:795 step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1259 run
    return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2730 call_for_each_replica
    return self._call_for_each_replica(fn, args, kwargs)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3417 _call_for_each_replica
    return fn(*args, **kwargs)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\training.py:788 run_step  **
    outputs = model.train_step(data)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\training.py:754 train_step
    y_pred = self(x, training=True)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\base_layer.py:998 __call__
    input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
C:\Users\USER\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\input_spec.py:271 assert_input_compatibility
    raise ValueError('Input ' + str(input_index) +

ValueError: Input 0 is incompatible with layer model: expected shape=(None, 28, 28, 1), found shape=(None, 32, 32, 3)

from deepswarm.

Pattio avatar Pattio commented on May 30, 2024

You should be using cifar10 settings file. Currently you are running cifar10 example with default.yaml. Input shape for cifar10 should be [!!python/tuple [32, 32, 3]]

from deepswarm.

Billnewgate327 avatar Billnewgate327 commented on May 30, 2024

I changed to version 3.6 of python, but it doesn't work again.

ValueError Traceback (most recent call last)
in
24 deepswarm = DeepSwarm(backend=backend)
25 # Find the topology for a given dataset
---> 26 topology = deepswarm.find_topology()
27 # Evaluate discovered topology
28 deepswarm.evaluate_topology(topology)

~\Desktop\DeepSwarm-master\deepswarm\deepswarm.py in find_topology(self)
43 self.aco = ACO(backend=self.backend, storage=self.storage)
44
---> 45 best_ant = self.aco.search()
46 best_model = self.storage.load_specified_model(self.backend, best_ant.path_hash)
47 return best_model

~\Desktop\DeepSwarm-master\deepswarm\aco.py in search(self)
37 while self.graph.current_depth <= cfg['max_depth']:
38 Log.header("Current search depth is %i" % self.graph.current_depth, type="GREEN")
---> 39 ants = self.generate_ants()
40
41 # Sort ants using user selected metric

~\Desktop\DeepSwarm-master\deepswarm\aco.py in generate_ants(self)
76 ant.path = self.graph.generate_path(self.aco_select)
77 # Evaluate how good is the new path
---> 78 ant.evaluate(self.backend, self.storage)
79 ants.append(ant)
80 Log.info(ant)

~\Desktop\DeepSwarm-master\deepswarm\aco.py in evaluate(self, backend, storage)
242 if existing_model is None:
243 # Generate model
--> 244 new_model = backend.generate_model(self.path)
245 else:
246 # Re-use model

~\Desktop\DeepSwarm-master\deepswarm\backends.py in generate_model(self, path)
142
143 # Return generated model
--> 144 model = tf.keras.Model(inputs=input_layer, outputs=layer)
145 self.compile_model(model)
146 return model

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs)
515 self._self_setattr_tracking = False # pylint: disable=protected-access
516 try:
--> 517 result = method(self, *args, **kwargs)
518 finally:
519 self._self_setattr_tracking = previous_value # pylint: disable=protected-access

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\functional.py in init(self, inputs, outputs, name, trainable, **kwargs)
118 generic_utils.validate_kwargs(kwargs, {})
119 super(Functional, self).init(name=name, trainable=trainable)
--> 120 self._init_graph_network(inputs, outputs)
121
122 @trackable.no_automatic_dependency_tracking

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs)
515 self._self_setattr_tracking = False # pylint: disable=protected-access
516 try:
--> 517 result = method(self, *args, **kwargs)
518 finally:
519 self._self_setattr_tracking = previous_value # pylint: disable=protected-access

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\functional.py in _init_graph_network(self, inputs, outputs)
201
202 # Keep track of the network's nodes and layers.
--> 203 nodes, nodes_by_depth, layers, _ = _map_graph_network(
204 self.inputs, self.outputs)
205 self._network_nodes = nodes

~\AppData\Local\Programs\Python\Python38\Scripts\tf2-gpu\lib\site-packages\tensorflow\python\keras\engine\functional.py in _map_graph_network(inputs, outputs)
998 for name in all_names:
999 if all_names.count(name) != 1:
-> 1000 raise ValueError('The name "' + name + '" is used ' +
1001 str(all_names.count(name)) + ' times in the model. '
1002 'All layer names should be unique.')

ValueError: The name "1617975030.9342244" is used 2 times in the model. All layer names should be unique.

from deepswarm.

Pattio avatar Pattio commented on May 30, 2024

What configuration you are using and are you running test example?

from deepswarm.

Billnewgate327 avatar Billnewgate327 commented on May 30, 2024

Yes, I am running the test example - cifar10

My configuration:
python: 3.6.8
tensorflow:.13.1
scikit-learn:0.20.3
numpy:1.19.5
colorama:0.4.1

Thank you so much for your help!

from deepswarm.

Pattio avatar Pattio commented on May 30, 2024

Hmm it's weird it seems that few layers were created at the exact same time. Did you change anything in .yaml config file? As a quick fix you can open backends.py and change

parameters = {'name': str(time.time())}

to

parameters = {'name': str(uuid.uuid4())}

from deepswarm.

Billnewgate327 avatar Billnewgate327 commented on May 30, 2024

No, I didn't change anything. And I try your suggestion that change:

parameters = {'name': str(time.time())}

to

parameters = {'name': str(uuid.uuid4())}

but it didn't work.

ValueError: The name "1618915107.6525285" is used 2 times in the model. All layer names should be unique.

------------------------------STARTING ACO SEARCH-------------------------------
------------------------------STARTING ACO SEARCH-------------------------------

Ant: 0x23ec6fce198
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:256, kernel_size:5, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 379ca2a5fe67b9b672cceea03a5c7547dcc60ab92c65474c264f8c318fd122b7

=======
Ant: 0x23ec6fce198
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:256, kernel_size:5, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 379ca2a5fe67b9b672cceea03a5c7547dcc60ab92c65474c264f8c318fd122b7

---------------------------Current search depth is 1----------------------------
---------------------------Current search depth is 1----------------------------
--------------------------------GENERATING ANT 1--------------------------------
--------------------------------GENERATING ANT 1--------------------------------

Ant: 0x23ec759a550
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:256, kernel_size:1, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 05db29859484c06781891dfaff8ada2e0c0ed5e5b17d58d4b2c3b9bd17a4799f

=======
Ant: 0x23ec759a550
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:256, kernel_size:1, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 05db29859484c06781891dfaff8ada2e0c0ed5e5b17d58d4b2c3b9bd17a4799f

--------------------------------GENERATING ANT 2--------------------------------
--------------------------------GENERATING ANT 2--------------------------------

Ant: 0x23eb8f0abe0
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:128, kernel_size:1, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 798a3f7ee91b9cb0b7d5478c63a06007643c702a44f24c69f7d400b032c2b0ba

=======
Ant: 0x23eb8f0abe0
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:128, kernel_size:1, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 798a3f7ee91b9cb0b7d5478c63a06007643c702a44f24c69f7d400b032c2b0ba

--------------------------------GENERATING ANT 3--------------------------------
--------------------------------GENERATING ANT 3--------------------------------

Ant: 0x23ec8cf0470
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:64, kernel_size:1, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: ebe0ed98f850445b751b8368068efeb5c3b27f3b5c8b88ae5553ac81daf31a8e

=======
Ant: 0x23ec8cf0470
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:64, kernel_size:1, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: ebe0ed98f850445b751b8368068efeb5c3b27f3b5c8b88ae5553ac81daf31a8e

--------------------------------GENERATING ANT 4--------------------------------
--------------------------------GENERATING ANT 4--------------------------------

Ant: 0x23eb902d9e8
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:64, kernel_size:3, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 78ac2dbb4781a729435be2ef23f54c34d34344dd8db21c78c64afd10ffcd929f

=======
Ant: 0x23eb902d9e8
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:64, kernel_size:3, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 78ac2dbb4781a729435be2ef23f54c34d34344dd8db21c78c64afd10ffcd929f

--------------------------------GENERATING ANT 5--------------------------------
--------------------------------GENERATING ANT 5--------------------------------

Ant: 0x23ec88cfbe0
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:128, kernel_size:5, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 28f75dc576370825f7420103b23c4de54624b85fb7260837199bde2c5ef120ec

=======
Ant: 0x23ec88cfbe0
Loss: 14.506286
Accuracy: 0.100000
Path: InputNode(shape:(32, 32, 3)) -> Conv2DNode(filter_count:128, kernel_size:5, activation:ReLU) -> FlattenNode() -> OutputNode(output_size:10, activation:Softmax)
Hash: 28f75dc576370825f7420103b23c4de54624b85fb7260837199bde2c5ef120ec

--------------------------------GENERATING ANT 6--------------------------------
--------------------------------GENERATING ANT 6--------------------------------

from deepswarm.

Billnewgate327 avatar Billnewgate327 commented on May 30, 2024

I'm not sure if this is the reason. I run the program in jupyter notebook. Cause it is easy to debug for me.

from deepswarm.

Pattio avatar Pattio commented on May 30, 2024

How did you install DeepSwarm?

from deepswarm.

Billnewgate327 avatar Billnewgate327 commented on May 30, 2024

I install DeepSwarm in Command prompt.

from deepswarm.

Pattio avatar Pattio commented on May 30, 2024

Sorry I was busy with other life stuff, does the problem still occur?

from deepswarm.

Related Issues (10)

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.