{"id":47299391,"url":"https://github.com/pyfenn/fenn","last_synced_at":"2026-03-31T03:00:37.860Z","repository":{"id":324934897,"uuid":"1098344896","full_name":"pyfenn/fenn","owner":"pyfenn","description":"Friendly Environment for Neural Networks (fenn) is a simple framework that automates ML/DL workflows by providing prebuilt trainers, templates, logging, configuration management, and much more.","archived":false,"fork":false,"pushed_at":"2026-03-27T19:55:43.000Z","size":16429,"stargazers_count":43,"open_issues_count":1,"forks_count":30,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-28T02:47:08.318Z","etag":null,"topics":["beginner-friendly","beginner-project","contributions-welcome","deep-learning","deep-neural-networks","good-first-issue","machine-learning","open-source","python"],"latest_commit_sha":null,"homepage":"https://pyfenn.org","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/pyfenn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"blkdmr","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-11-17T15:14:07.000Z","updated_at":"2026-03-27T19:55:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pyfenn/fenn","commit_stats":null,"previous_names":["blkdmr/deepl-starter","blkdmr/smle","blkdmr/fenn"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pyfenn/fenn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyfenn%2Ffenn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyfenn%2Ffenn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyfenn%2Ffenn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyfenn%2Ffenn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyfenn","download_url":"https://codeload.github.com/pyfenn/fenn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyfenn%2Ffenn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31217985,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-30T15:24:02.938Z","status":"online","status_checked_at":"2026-03-31T02:00:06.327Z","response_time":111,"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":["beginner-friendly","beginner-project","contributions-welcome","deep-learning","deep-neural-networks","good-first-issue","machine-learning","open-source","python"],"created_at":"2026-03-16T23:00:24.160Z","updated_at":"2026-03-31T03:00:37.854Z","avatar_url":"https://github.com/pyfenn.png","language":"Python","funding_links":["https://github.com/sponsors/blkdmr"],"categories":["🤖 Machine Learning \u0026 AI"],"sub_categories":["Tools"],"readme":"# Fenn: Friendly Environment for Neural Networks\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"banner.png\" alt=\"fenn logo\" width=\"1000\"\u003e\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![GitHub stars](https://img.shields.io/github/stars/blkdmr/fenn?style=social) ![GitHub forks](https://img.shields.io/github/forks/blkdmr/fenn?style=social) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/261c40f69583462baa200aee959bcc8f)](https://app.codacy.com/gh/blkdmr/fenn/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/pyfenn/fenn/graph/badge.svg?token=7RTTZ1SFMM)](https://codecov.io/gh/pyfenn/fenn)\n![PyPI version](https://img.shields.io/pypi/v/fenn) ![License](https://img.shields.io/github/license/blkdmr/fenn) [![PyPI Downloads](https://img.shields.io/pypi/dm/fenn.svg?label=downloads\u0026logo=pypi\u0026color=blue)](https://pypi.org/project/fenn/) [![Discord Server](https://img.shields.io/badge/Discord-PyFenn-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/WxDkvktBAa)[![Sponsor](https://img.shields.io/badge/sponsor-GitHub-pink)](https://github.com/sponsors/blkdmr)\n[![Netlify Status](https://api.netlify.com/api/v1/badges/e5b91aff-cc0e-4b90-becd-d783c3b043bd/deploy-status)](https://app.netlify.com/projects/pyfenn/deploys)\n\u003c/div\u003e\n\n**Stop writing boilerplate. Start training.**\n\nFriendly Environment for Neural Networks (fenn) is a simple framework that automates ML/DL workflows by providing prebuilt trainers, templates, logging, configuration management, and much more. With fenn, you can focus on your model and data while it takes care of the rest.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"fenn.gif\" alt=\"fenn preview\" width=\"1000\"\u003e\u003c/p\u003e\n\n## Support fenn\n\nIf fenn is useful for your work or research, consider supporting its development.\n\nYou can support the project by **starring the repository** on GitHub. It improves visibility and helps others discover fenn.\n\nSponsorship also helps fund maintenance, improvements, and new features.\n\nSupport the project:\nhttps://github.com/sponsors/blkdmr\n\n## Why fenn?\n\n- **Auto-Configuration**: YAML files are automatically parsed and injected into your entrypoint with CLI override support. No more hardcoded hyperparameters or scattered config logic.\n\n- **Unified Logging**: All logs, print statements, and experiment metadata are automatically captured to local files and remote tracking backends simultaneously with no manual setup required.\n\n- **Backend Monitoring**: Native integration with industry-standard trackers like [Weights \u0026 Biases](https://wandb.ai/) (W\u0026B) for centralized experiment tracking and [TensorBoard](https://www.tensorflow.org/tensorboard) for real-time metric visualization\n\n- **Instant Notifications**: Get real-time alerts on **Discord** and **Telegram** when experiments start, complete, or fail—no polling or manual checks.\n\n- **Trainers**: Built-in support for training loops, validation, and testing with minimal boilerplate. Just define your model and data, and let fenn handle the rest.\n\n- **Template Ready**: Built-in support for reproducible, shareable experiment templates.\n\n\n## Quickstart\n\nInstall the fenn library using\n\n```bash\npip install fenn\n```\n\nor \n\n```bash\nuv pip install fenn\n```\n\n### Initialize a Project\n\nRun the CLI tool to see which repositories are available and to download a template together with its configuration file. First, list the available repositories:\n\n```bash\nfenn list\n````\n\nThen, download one of the available templates (here `empty` is just an example):\n\n```bash\nfenn pull empty\n```\n\nThis command downloads the selected template into the current directory and generates the corresponding configuration file, which can be customized before running or extending the project.\n\n### Configuration\n\nfenn relies on a simple YAML structure to define hyperparameters, paths, logging options, and integrations. You can configure the ``fenn.yaml`` file with the hyperparameters and options for your project.\n\nThe structure of the ``fenn.yaml`` file is:\n\n```yaml\n# ---------------------------------------\n# Fenn Configuration (Modify Carefully)\n# ---------------------------------------\n\nproject: empty\n\n# ---------------------------\n# Logging \u0026 Tracking\n# ---------------------------\n\nlogger:\n  dir: logger\n\nexport:\n  dir: exports\n\n# ---------------------------------------\n# Example of User Section\n# ---------------------------------------\n\ntrain:\n    lr: 0.001\n```\n\n### Write Your Code\n\nUse the `@app.entrypoint` decorator. Your configuration variables are automatically passed via `args`.\n\n```python\nfrom fenn import Fenn\n\napp = Fenn()\n\n@app.entrypoint\ndef main(args):\n    # 'args' contains your fenn.yaml configurations\n    print(f\"Training with learning rate: {args['train']['lr']}\")\n\n    # Your logic here...\n\nif __name__ == \"__main__\":\n    app.run()\n```\n\nBy default, fenn will look for a configuration file named `fenn.yaml` in the current directory. If you would like to use a different name, a different location, or have multiple configuration files for different configurations, you can call `set_config_file()` and update the path or the name of your configuration file. You must assign the filename before calling `run()`.\n\nThe optional `export.dir` setting centralizes where artifacts are written. Components that export files can use this shared directory instead of requiring an output path to be passed through every call.\n\n```python\napp = Fenn()\napp.set_config_file(\"my_file.yaml\")\n```\n\n### Run It\n\nYou can run your code as usual\n\n```bash\npython main.py\n```\n\nand fenn will take care of the rest for you.\n\n### Training Models\n\nUse built-in trainers to handle your training loops with minimal boilerplate.\n\n```python\nimport torch.nn as nn\nimport torch.optim as optim\n\nfrom fenn.nn.trainers import ClassificationTrainer\nfrom fenn.nn.utils import Checkpoint\n\n@app.entrypoint\ndef main(args):\n        \n    # Define your data\n    train_loader = DataLoader(train_dataset, batch_size=args[\"train\"][\"batch\"], shuffle=True)\n    val_loader = DataLoader(val_dataset, batch_size=args[\"test\"][\"batch\"], shuffle=False)\n    test_loader = DataLoader(test_dataset, batch_size=args[\"test\"][\"batch\"], shuffle=False)\n    \n    # Define your model\n    model = nn.Sequential( ... )     \n    loss = nn.CrossEntropyLoss()\n    optimizer = optim.Adam(model.parameters(),\n                            lr=float(args[\"train\"][\"lr\"]))\n\n    # Initialize a ClassificationTrainer\n    trainer = ClassificationTrainer(\n        model=model,\n        loss_fn=loss,\n        optim=optimizer,\n        num_classes=4\n    )\n\n    # Train and predict your model\n    trainer.fit(train_loader, epochs=10, val_loader=val_loader)\n    preds = trainer.predict(test_loader)\n```\n\n## Contributing\n\nContributions are welcome! \n\nInterested in contributing? Join the community on [Discord](https://discord.com/invite/6v9xtJxvN7).\n\nWe can then discuss a possible contribution together, answer any questions, and help you get started!\n\n**Please consult our CONTRIBUTING.md and CODE_OF_CONDUCT.md before opening a pull request.**\n\n## Maintainers\n\nThe development and long-term direction of **fenn** is guided by the following maintainers:\n\n| Maintainer | Role |\n|------------|------|\n| [@blkdmr](https://github.com/blkdmr) | Creator \u0026 Project Administrator |\n| [@giuliaOddi](https://github.com/giuliaOddi) | Project Administrator |\n| [@GlowCheese](https://github.com/GlowCheese) | Core Maintainer |\n| [@franciscolima05](https://github.com/franciscolima05) | Core Maintainer |\n\nMaintainers oversee the project roadmap, review pull requests, coordinate releases, and ensure the long-term stability and quality of the framework.\n\nThank you for supporting the project.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyfenn%2Ffenn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyfenn%2Ffenn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyfenn%2Ffenn/lists"}