{"id":13487137,"url":"https://github.com/danielegrattarola/spektral","last_synced_at":"2026-10-18T20:16:19.761Z","repository":{"id":37458319,"uuid":"166213444","full_name":"danielegrattarola/spektral","owner":"danielegrattarola","description":"Graph Neural Networks with Keras and Tensorflow 2.","archived":false,"fork":false,"pushed_at":"2024-01-21T16:47:04.000Z","size":13458,"stargazers_count":2397,"open_issues_count":74,"forks_count":344,"subscribers_count":39,"default_branch":"master","last_synced_at":"2026-10-14T22:23:26.487Z","etag":null,"topics":["deep-learning","graph-deep-learning","graph-neural-networks","keras","python","tensorflow","tensorflow2"],"latest_commit_sha":null,"homepage":"https://graphneural.network","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielegrattarola.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-01-17T11:19:10.000Z","updated_at":"2026-10-13T18:23:46.000Z","dependencies_parsed_at":"2023-01-22T22:46:05.735Z","dependency_job_id":"c175633c-eb73-4205-a714-975971c13831","html_url":"https://github.com/danielegrattarola/spektral","commit_stats":{"total_commits":959,"total_committers":29,"mean_commits":33.06896551724138,"dds":"0.18769551616266944","last_synced_commit":"74a108eaf593c5456fa73883d62c1f129230dfac"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/danielegrattarola/spektral","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielegrattarola%2Fspektral","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielegrattarola%2Fspektral/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielegrattarola%2Fspektral/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielegrattarola%2Fspektral/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielegrattarola","download_url":"https://codeload.github.com/danielegrattarola/spektral/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielegrattarola%2Fspektral/sbom","scorecard":{"id":319605,"data":{"date":"2025-08-11","repo":{"name":"github.com/danielegrattarola/spektral","commit":"a5fa5e38fca4eaca1e47ccfe1b00e0a61f64648b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 3/17 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/examples.yml:1","Warn: no topLevel permission defined: .github/workflows/style_check.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/examples.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/examples.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/examples.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/examples.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/style_check.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/style_check.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/style_check.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/style_check.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/danielegrattarola/spektral/test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/examples.yml:18","Warn: pipCommand not pinned by hash: .github/workflows/examples.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/style_check.yml:18","Warn: pipCommand not pinned by hash: .github/workflows/style_check.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/style_check.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:26","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   8 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T01:03:38.265Z","repository_id":37458319,"created_at":"2025-08-18T01:03:38.265Z","updated_at":"2025-08-18T01:03:38.265Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38341179,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-18T02:00:06.448Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-learning","graph-deep-learning","graph-neural-networks","keras","python","tensorflow","tensorflow2"],"created_at":"2024-07-31T18:00:55.778Z","updated_at":"2026-10-18T20:16:19.423Z","avatar_url":"https://github.com/danielegrattarola.png","language":"Python","funding_links":[],"categories":["The Data Science Toolbox","Python","Graph Machine Learning","图数据处理","Graph","Deep Learning","Tensor Flow","Open Source Libraries","Examples/Notebooks","Other 💛💛💛💛💛\u003ca name=\"Other\" /\u003e","Graph Neural Networks"],"sub_categories":["Deep Learning Packages","Others","TensorFlow","Automated Machine Learning","Spektral是一个基于Keras API和TensorFlow 2的用于图深度学习的Python库。该项目的主要目标是提供一个简单而灵活的框架来创建图神经网络（GNN）。","Normalization in CNNs"],"readme":"\u003cimg src=\"https://danielegrattarola.github.io/spektral/img/logo_dark.svg\" style=\"max-width: 400px; width: 100%;\"/\u003e\n\n# Welcome to Spektral\nSpektral is a Python library for graph deep learning, based on the Keras API and TensorFlow 2.\nThe main goal of this project is to provide a simple but flexible framework for creating graph neural networks (GNNs).\n\nYou can use Spektral for classifying the users of a social network, predicting molecular properties, generating new graphs with GANs, clustering nodes, predicting links, and any other task where data is described by graphs. \n\nSpektral implements some of the most popular layers for graph deep learning, including: \n\n- [Graph Convolutional Networks (GCN)](https://arxiv.org/abs/1609.02907)\n- [Chebyshev convolutions](https://arxiv.org/abs/1606.09375)\n- [GraphSAGE](https://arxiv.org/abs/1706.02216)\n- [ARMA convolutions](https://arxiv.org/abs/1901.01343)\n- [Edge-Conditioned Convolutions (ECC)](https://arxiv.org/abs/1704.02901)\n- [Graph attention networks (GAT)](https://arxiv.org/abs/1710.10903)\n- [Approximated Personalized Propagation of Neural Predictions (APPNP)](https://arxiv.org/abs/1810.05997)\n- [Graph Isomorphism Networks (GIN)](https://arxiv.org/abs/1810.00826)\n- [Diffusional Convolutions](https://arxiv.org/abs/1707.01926)\n\nand many others (see [convolutional layers](https://graphneural.network/layers/convolution/)).\n\nYou can also find [pooling layers](https://graphneural.network/layers/pooling/), including:\n\n- [MinCut pooling](https://arxiv.org/abs/1907.00481)\n- [DiffPool](https://arxiv.org/abs/1806.08804)\n- [Top-K pooling](http://proceedings.mlr.press/v97/gao19a/gao19a.pdf)\n- [Self-Attention Graph (SAG) pooling](https://arxiv.org/abs/1904.08082)\n- Global pooling\n- [Global gated attention pooling](https://arxiv.org/abs/1511.05493)\n- [SortPool](https://www.cse.wustl.edu/~muhan/papers/AAAI_2018_DGCNN.pdf)\n\nSpektral also includes lots of utilities for representing, manipulating, and transforming graphs in your graph deep learning projects.\n\nSee how to [get started with Spektral](https://graphneural.network/getting-started/) and have a look at the [examples](https://danielegrattarola.github.io/spektral/examples/) for some templates.\n\nThe source code of the project is available on [Github](https://github.com/danielegrattarola/spektral).  \nRead the documentation [here](https://graphneural.network).  \n\nIf you want to cite Spektral in your work, refer to our paper: \n\n\u003e [Graph Neural Networks in TensorFlow and Keras with Spektral](https://arxiv.org/abs/2006.12138)\u003cbr\u003e\n\u003e Daniele Grattarola and Cesare Alippi\n\n## Installation\nSpektral is compatible with Python 3.6 and above, and is tested on the latest versions of Ubuntu, MacOS, and Windows. \nOther Linux distros should work as well. \n\nThe simplest way to install Spektral is from PyPi: \n\n```bash\npip install spektral\n```\n\nTo install Spektral from source, run this in a terminal:\n\n```bash\ngit clone https://github.com/danielegrattarola/spektral.git\ncd spektral\npython setup.py install  # Or 'pip install .'\n```\n\nTo install Spektral on [Google Colab](https://colab.research.google.com/):\n\n```\n! pip install spektral\n```\n\n## New in Spektral 1.0\n\nThe 1.0 release of Spektral is an important milestone for the library and brings many new features and improvements. \n\nIf you have already used Spektral in your projects, the only major change that you need to be aware of is the new `datasets` API.\n\nThis is a summary of the new features and changes: \n\n- The new `Graph` and `Dataset` containers standardize how Spektral handles data. \n**This does not impact your models**, but makes it easier to use your data in Spektral.\n- The new `Loader` class hides away all the complexity of creating graph batches. \nWhether you want to write a custom training loop or use Keras' famous model-dot-fit approach, you only need to worry about the training logic and not the data. \n- The new `transforms` module implements a wide variety of common operations on graphs, that you can now `apply()` to your datasets. \n- The new `GeneralConv` and `GeneralGNN` classes let you build models that are, well... general. Using state-of-the-art results from recent literature means that you don't need to worry about which layers or architecture to choose. The defaults will work well everywhere. \n- New datasets: QM7 and ModelNet10/40, and a new wrapper for OGB datasets. \n- Major clean-up of the library's structure and dependencies.\n- New examples and tutorials.\n\n\n\n## Contributing\nSpektral is an open-source project available [on Github](https://github.com/danielegrattarola/spektral), and contributions of all types are welcome. \nFeel free to open a pull request if you have something interesting that you want to add to the framework.\n\nThe contribution guidelines are available [here](https://github.com/danielegrattarola/spektral/blob/master/CONTRIBUTING.md) and a list of feature requests is available [here](https://github.com/danielegrattarola/spektral/projects/1).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielegrattarola%2Fspektral","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielegrattarola%2Fspektral","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielegrattarola%2Fspektral/lists"}