Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
546 commits
Select commit Hold shift + click to select a range
13a0623
Update README.md
joaopauloschuler Dec 19, 2023
e520051
Adding TNNetTransposeXD and TNNetTransposeYD.
joaopauloschuler Jan 25, 2024
0f303d7
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Jan 25, 2024
28bae6e
Adding Sentiment Analysis example.
joaopauloschuler Jan 25, 2024
e97bf6a
Update README.md
joaopauloschuler Feb 4, 2024
d5dd333
Update README.md
joaopauloschuler Feb 4, 2024
fe8ef2f
Update README.md
joaopauloschuler Feb 4, 2024
870a8de
Update README.md
joaopauloschuler Feb 4, 2024
aea2333
Update README.md
joaopauloschuler Feb 14, 2024
fbbe7eb
Update README.md
joaopauloschuler Feb 20, 2024
ff9266c
Update README.md
joaopauloschuler Feb 21, 2024
a0b27bc
Update README.md
joaopauloschuler Feb 22, 2024
032cc23
Update README.md
joaopauloschuler Feb 22, 2024
8a51d27
Update README.md
joaopauloschuler Feb 26, 2024
722c8ce
Update README.md
joaopauloschuler Feb 26, 2024
319c13f
Create README.md
joaopauloschuler Feb 27, 2024
48f4023
Update README.md
joaopauloschuler Feb 27, 2024
2b30439
Update README.md
joaopauloschuler Feb 27, 2024
3c3a53c
Better one neuron example.
joaopauloschuler Mar 1, 2024
b68a982
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Mar 1, 2024
52a0b6a
Explaining the function dotproducts.
joaopauloschuler Mar 2, 2024
8299584
Coded PositionalEncoding plus fixes.
joaopauloschuler Mar 2, 2024
5e9af74
Coded new layer TNNetAddPositionalEmbedding.
joaopauloschuler Mar 2, 2024
723ba3e
Coding pointwisesoftmax layer #131
joaopauloschuler Mar 3, 2024
981ced2
Update Only One Neuron README.md
joaopauloschuler Mar 3, 2024
93f806c
Update README.md
joaopauloschuler Mar 4, 2024
67612c2
Update README.md
joaopauloschuler Mar 4, 2024
4ab0b33
Create README.md
joaopauloschuler Mar 4, 2024
cbc162f
Update README.md
joaopauloschuler Mar 4, 2024
af9af96
Update README.md
joaopauloschuler Mar 4, 2024
1aac4bd
Update README.md
joaopauloschuler Mar 4, 2024
206d334
Update README.md
joaopauloschuler Mar 4, 2024
9ba7cf4
Update README.md
joaopauloschuler Mar 4, 2024
6ca3884
Update README.md
joaopauloschuler Mar 5, 2024
3f3498c
Adding DotProductsPointwise #131
joaopauloschuler Mar 14, 2024
ef146b2
Adding layer TNNetDotProducts #131
joaopauloschuler Mar 14, 2024
80f5ff6
Adding TNNetDotProducts
joaopauloschuler Mar 14, 2024
573131c
Coding self-attention #131
joaopauloschuler Mar 14, 2024
89b135c
Adding GetDefaultNumericFormat #131
joaopauloschuler Mar 16, 2024
9455b13
Coding FP structural parameters #131
joaopauloschuler Mar 16, 2024
42a76b8
Coding AddSingleHeadTransformerBlock #131
joaopauloschuler Mar 16, 2024
8bf95c2
Bug fixing the first transformer block.
joaopauloschuler Mar 16, 2024
b34d640
Coding multi-head self-attention #131 .
joaopauloschuler Mar 17, 2024
c7d744b
Coding multi-head self-attention #131
joaopauloschuler Mar 17, 2024
ac81701
Coding multi-head self-attetion. #131
joaopauloschuler Mar 17, 2024
5f064e4
Small optimization #131 .
joaopauloschuler Mar 18, 2024
aba3ca3
Coding #131 .
joaopauloschuler Mar 18, 2024
2c92d76
Coding normalization for transformers #131 .
joaopauloschuler Mar 20, 2024
b4eb24b
MovingScale test/fine tune. #131
joaopauloschuler Mar 24, 2024
6681fb3
In testing we trust #131
joaopauloschuler Mar 24, 2024
c07e250
Faster softmax.
joaopauloschuler Mar 25, 2024
289b7cd
Faster softmax #131 .
joaopauloschuler Mar 25, 2024
d709601
Coding transformers #131
joaopauloschuler Mar 27, 2024
fcb2467
SkipBackpropDerivative #131
joaopauloschuler Mar 29, 2024
4c48694
Updating source code examples
joaopauloschuler Mar 29, 2024
14b5832
{SkipBackpropDerivative=}1 in examples
joaopauloschuler Mar 29, 2024
20360ca
{SkipBackpropDerivative=}1
joaopauloschuler Mar 29, 2024
e05bd1c
Coding transformers #131 .
joaopauloschuler Mar 30, 2024
975a432
Updating source code comments.
joaopauloschuler Apr 1, 2024
de67bab
Coding TNNetEmbedding #132 .
joaopauloschuler Apr 1, 2024
6a69d1a
Coding TNNetTokenAndPositionalEmbedding #133 .
joaopauloschuler Apr 1, 2024
8d6f5f9
Coding #132 and $133 .
joaopauloschuler Apr 1, 2024
6d1876a
Adding transformer example #131 .
joaopauloschuler Apr 1, 2024
2231404
Coding #132 and #133.
joaopauloschuler Apr 1, 2024
eb45b7d
CopyNoChecksIntArr
joaopauloschuler Apr 3, 2024
6c9d69d
Coding #132 and #133 .
joaopauloschuler Apr 3, 2024
818f540
Missed debug info.
joaopauloschuler Apr 3, 2024
e6571e0
Coding transformers #131
joaopauloschuler Apr 6, 2024
bb5f777
Coding OneHotEncodingReversed
joaopauloschuler Apr 6, 2024
66c8745
Coding Adam Optimizer #134 .
joaopauloschuler Apr 10, 2024
aeb6c21
Fixing #131. Coding $134.
joaopauloschuler Apr 15, 2024
bbc8e89
Improving #132 and #133 .
joaopauloschuler Apr 17, 2024
753e00e
Optimizing #131.
joaopauloschuler Apr 21, 2024
4ae56b0
Create videos.md
joaopauloschuler Apr 21, 2024
a483a8f
Update videos.md
joaopauloschuler Apr 21, 2024
08627d0
Removing min learning rate.
joaopauloschuler Apr 28, 2024
cc8161d
Fixing #132 and #133 .
joaopauloschuler Apr 28, 2024
9836c32
Bug fixing #131
joaopauloschuler Apr 29, 2024
5ec4901
Update README.md
joaopauloschuler May 22, 2024
3430f32
NoForward softmax, GroupedOneHotEncoding, GroupedPointSoftMax
joaopauloschuler Jun 17, 2024
996cd4c
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Jun 17, 2024
11f49fd
Generative NLP Dataset functions
joaopauloschuler Jun 17, 2024
d109bb9
EnableMultiClassComparison
joaopauloschuler Jun 17, 2024
d335a4e
NLP NoForward Support
joaopauloschuler Jun 17, 2024
a1404d9
Better Adam Optimizer default values.
joaopauloschuler Jul 8, 2024
19c903f
Range check bug fix.
joaopauloschuler Jul 8, 2024
eb7582d
Better embedding default values.
joaopauloschuler Jul 8, 2024
535e47d
Adding option to save when the best loss is found
joaopauloschuler Jul 13, 2024
34b9e32
Adding debug code.
joaopauloschuler Jul 14, 2024
3b58bf7
Fixes error in maxpool and adds debug info.
joaopauloschuler Jul 15, 2024
03c2393
Adding testing results
joaopauloschuler Jul 15, 2024
6daeb3d
Adding TVolume.PrintX
joaopauloschuler Jul 24, 2024
eda8f72
Adding TNNetPointwiseSoftMax.PrepareNoForwardMask
joaopauloschuler Jul 24, 2024
c2615a9
Updating CAI Transformer.
joaopauloschuler Jul 24, 2024
4ea956a
Adding bias to CAI transformer.
joaopauloschuler Jul 24, 2024
cb71f24
Reverting previous commit.
joaopauloschuler Jul 24, 2024
102d593
Convolutinal initialization - same as Keras.
joaopauloschuler Jul 24, 2024
0ea4256
Coding initializers.
joaopauloschuler Jul 29, 2024
a4871dd
Adding ReverseGroupedOneHotEncoding
joaopauloschuler Aug 4, 2024
5779b54
Updated CAI transformer block.
joaopauloschuler Aug 4, 2024
c0bdbc6
Adding Optimizer Reset.
joaopauloschuler Aug 4, 2024
44fbbb6
Adding FilterCSVWithNumbersUpToMax
joaopauloschuler Aug 11, 2024
482c54e
Adding TNNetVolume.PointwiseNorm()
joaopauloschuler Aug 11, 2024
6b68c8e
Making 1000+ layers deep models stable.
joaopauloschuler Aug 11, 2024
7d1dda9
Adding PointwiseMul.
joaopauloschuler Aug 17, 2024
340f23e
Adding AddGroupedSelfAttentionCAI
joaopauloschuler Aug 17, 2024
5e2c25c
Adding ClipNorm
joaopauloschuler Aug 17, 2024
b0472e3
Delphi compatibility.
joaopauloschuler Aug 17, 2024
c374fd6
Adding a transformer decoder example.
joaopauloschuler Aug 18, 2024
2bdd1fd
Fixing code portability.
joaopauloschuler Aug 20, 2024
1055df4
Fixing code portability.
joaopauloschuler Aug 20, 2024
c9c0f4a
Coding BackpropagatePointwiseOpenCL
joaopauloschuler Aug 20, 2024
a9139ed
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Aug 20, 2024
66f02c2
Fixes TNNetChannelZeroCenter.BackpropagateNoTest
joaopauloschuler Aug 20, 2024
31e19e7
Fixes bug #137 .
joaopauloschuler Aug 20, 2024
0fe04c0
Adding TVolume.PowMinus1()
joaopauloschuler Aug 20, 2024
b8991a2
Adding TNNetChannelNorm
joaopauloschuler Aug 20, 2024
cfab3e9
Transformer decoder coding.
joaopauloschuler Aug 21, 2024
baf6324
Coding CAI Transformer #141
joaopauloschuler Aug 28, 2024
52b0902
Fixing NLP examples.
joaopauloschuler Aug 31, 2024
b3ac71b
Adding GenerateStringFromCasualCharNN
joaopauloschuler Aug 31, 2024
98c8b5e
Add debug info to NeuralFit
joaopauloschuler Sep 4, 2024
66a8e39
Add SSR1 functions.
joaopauloschuler Sep 4, 2024
6212155
Fixes grouped convolutions memory usage.
joaopauloschuler Sep 4, 2024
71c77bc
Update README.md
joaopauloschuler Sep 7, 2024
3e13c53
Update README.md
joaopauloschuler Sep 7, 2024
20d1504
Update README.md
joaopauloschuler Sep 7, 2024
cc7d7e9
Update README.md
joaopauloschuler Sep 7, 2024
d8d8025
Speeding up grouped dot product.
joaopauloschuler Sep 7, 2024
73d7fe1
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Sep 7, 2024
173ded6
New tokenizer support at volumes.
joaopauloschuler Sep 15, 2024
5f93e17
New tokenizer support at neural datasets.
joaopauloschuler Sep 15, 2024
8513ad9
Adding new tokenizer still under construction.
joaopauloschuler Sep 15, 2024
211f95e
Update README.md
joaopauloschuler Sep 15, 2024
0ae2481
Coded a tokenizer #142
joaopauloschuler Sep 15, 2024
d37f4d7
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Sep 15, 2024
2bfd2d3
Add files via upload
joaopauloschuler Sep 16, 2024
971e592
Update README.md
joaopauloschuler Sep 16, 2024
b712086
Update README.md
joaopauloschuler Sep 16, 2024
9968450
Update videos.md
joaopauloschuler Sep 16, 2024
4d5879a
Tokenizers and Transformers are ready to use.
joaopauloschuler Sep 16, 2024
6be4148
Update README.md
joaopauloschuler Sep 16, 2024
8fcc36f
Remove MTPCPU (multithreadprocslaz) dependency. #143
joaopauloschuler Sep 29, 2024
f91e15f
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Sep 29, 2024
727c365
Remove MTPCPU (multithreadprocslaz) dependency. #143
joaopauloschuler Sep 29, 2024
5f71918
Update SimpleImageClassifierCPU.ipynb #143
joaopauloschuler Sep 29, 2024
1a611ce
Update SimpleImageClassifierCPUResize48.ipynb #134
joaopauloschuler Sep 29, 2024
80cd855
Update SimpleImageClassifierGPU.ipynb #134
joaopauloschuler Sep 29, 2024
43bbc8c
Update IdentityShortcutConnection.ipynb #134
joaopauloschuler Sep 29, 2024
18c70c3
Updating examples #134.
joaopauloschuler Sep 29, 2024
85170c3
Removing MTP #134
joaopauloschuler Sep 30, 2024
52f0786
Update TrasformerDecodersWithTokenizer.ipynb #134
joaopauloschuler Sep 30, 2024
3d4df39
Update transformer_decoder_tiny_stories_dataset_3k_vocab.ipynb #134
joaopauloschuler Sep 30, 2024
e4ad90e
Code portability
joaopauloschuler Sep 30, 2024
ee9c0a8
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Sep 30, 2024
2e753ad
Update README.md
joaopauloschuler Oct 1, 2024
d6ed888
Update README.md
joaopauloschuler Oct 1, 2024
1e256d8
Update README.md
joaopauloschuler Oct 1, 2024
c56f6c6
Update README.md
joaopauloschuler Oct 1, 2024
b0da519
Update README.md
joaopauloschuler Oct 1, 2024
d1749e3
Update README.md
joaopauloschuler Oct 1, 2024
9c2fcd0
Update README.md
joaopauloschuler Oct 1, 2024
2f7bbc3
Update README.md
joaopauloschuler Oct 1, 2024
961f670
Update README.md
joaopauloschuler Oct 1, 2024
b84e4b5
Update README.md
joaopauloschuler Oct 1, 2024
970f06a
Update README.md
joaopauloschuler Oct 1, 2024
36f9e89
Update README.md
joaopauloschuler Oct 1, 2024
e2fa1ad
Update README.md
joaopauloschuler Oct 1, 2024
8da0a26
Update README.md
joaopauloschuler Oct 1, 2024
5827239
Update README.md
joaopauloschuler Oct 1, 2024
84a5f56
Update README.md
joaopauloschuler Oct 1, 2024
18f011a
Update README.md
joaopauloschuler Oct 1, 2024
a589293
Update README.md
joaopauloschuler Oct 1, 2024
ac3b21c
Update README.md
joaopauloschuler Oct 2, 2024
b3a0092
Update README.md
joaopauloschuler Oct 2, 2024
7f192fc
Update README.md
joaopauloschuler Oct 2, 2024
aeb2229
Update README.md
joaopauloschuler Oct 2, 2024
0a3fb13
Update README.md
joaopauloschuler Oct 2, 2024
032ae58
Update README.md
joaopauloschuler Oct 2, 2024
ebf5917
Update README.md
joaopauloschuler Oct 2, 2024
6d4547c
Update README.md
joaopauloschuler Oct 2, 2024
ec9af40
Update README.md
joaopauloschuler Oct 2, 2024
d6e27b3
Update README.md
joaopauloschuler Oct 2, 2024
b5b54b8
Fixing source code comments.
joaopauloschuler Oct 2, 2024
0d59b7d
Update README.md
joaopauloschuler Oct 2, 2024
c0a1c54
Update README.md
joaopauloschuler Oct 2, 2024
76ed6a2
Update README.md
joaopauloschuler Oct 2, 2024
69012c3
Attention for images
joaopauloschuler Oct 6, 2024
d7f92e1
Merge branch 'master' of github.com:joaopauloschuler/neural-api
joaopauloschuler Oct 6, 2024
5d36962
Transformers on images
joaopauloschuler Oct 7, 2024
3e16caf
Update TrasformerDecodersWithTokenizer.ipynb
joaopauloschuler Oct 8, 2024
e1416e3
Update TrasformerDecodersWithTokenizer.ipynb
joaopauloschuler Oct 8, 2024
2190ebd
Update TrasformerDecodersWithTokenizer.ipynb
joaopauloschuler Oct 8, 2024
b5c5fb0
Update TrasformerDecodersWithTokenizer.ipynb
joaopauloschuler Oct 8, 2024
46038f9
Update TrasformerDecodersWithTokenizer.ipynb
joaopauloschuler Oct 8, 2024
e9a6ac4
Update README.md
joaopauloschuler Oct 8, 2024
d5d3272
Update README.md
joaopauloschuler Oct 8, 2024
38cfd9c
Update README.md
joaopauloschuler Oct 8, 2024
2f8ced7
Update README.md
joaopauloschuler Oct 8, 2024
0463ea9
Update README.md
joaopauloschuler Oct 15, 2024
6c9c2b4
NLP and act functions
joaopauloschuler May 14, 2025
9d0eeb7
objfpc
joaopauloschuler May 14, 2025
9a2da8d
Add related work on optimizing large language models
joaopauloschuler Dec 3, 2025
c5ee546
Create Dockerfile for Ubuntu 24.04 devcontainer
joaopauloschuler Dec 9, 2025
0bd6f52
Add devcontainer configuration for Free Pascal
joaopauloschuler Dec 9, 2025
b3c502e
Initial plan
Copilot Dec 9, 2025
9f25956
Add FPCUnit automated testing framework with CI pipeline
Copilot Dec 9, 2025
fe3ef3a
Fix GetTempFileName usage and add workflow permissions
Copilot Dec 9, 2025
8ad52b0
Merge pull request #156 from joaopauloschuler/copilot/add-automated-t…
joaopauloschuler Dec 9, 2025
cc475cc
Create bin directory before building tests
joaopauloschuler Dec 9, 2025
83763d0
Remove upload of test results in workflow
joaopauloschuler Dec 9, 2025
d80e319
Merge pull request #157 from joaopauloschuler/ai-coding
joaopauloschuler Dec 9, 2025
bee8b5d
Initial plan
Copilot Dec 9, 2025
d0ec71d
Add 25 new tests for TNNetVolume and TNNetLayers
Copilot Dec 9, 2025
d53eac0
Add threading tests and update CI workflow for LCL support
Copilot Dec 9, 2025
0750161
Address code review feedback: improve comments and layer references
Copilot Dec 9, 2025
c4adc8c
Merge pull request #158 from joaopauloschuler/copilot/improve-existin…
joaopauloschuler Dec 10, 2025
bddc7cc
Initial plan
Copilot Dec 10, 2025
5291f19
Merge pull request #160 from joaopauloschuler/ai-coding
joaopauloschuler Dec 10, 2025
193c4fe
Add comprehensive test coverage: 99 tests (up from 40)
Copilot Dec 10, 2025
86b6a29
Fix non-deterministic test by using fixed index instead of Random()
Copilot Dec 10, 2025
5ec686c
Add -Mobjfpc flag to CI workflow for proper Pascal compilation
Copilot Dec 10, 2025
9f2a794
Merge pull request #159 from joaopauloschuler/copilot/improve-testing…
joaopauloschuler Dec 10, 2025
d51ae48
Merge pull request #161 from joaopauloschuler/ai-coding
joaopauloschuler Dec 10, 2025
54278f5
Initial plan
Copilot Dec 10, 2025
18cbf08
Add 63 new tests for samplers, extra layers, and training (162 total)
Copilot Dec 10, 2025
13e9cf5
Merge pull request #162 from joaopauloschuler/copilot/improve-existin…
joaopauloschuler Dec 10, 2025
a44a055
Merge pull request #163 from joaopauloschuler/ai-coding
joaopauloschuler Dec 10, 2025
df9aca3
Adjust learning rate and training epochs in tests
joaopauloschuler Dec 10, 2025
54acfef
Merge pull request #164 from joaopauloschuler/ai-coding
joaopauloschuler Dec 10, 2025
dca3e69
Initial plan
Copilot Dec 10, 2025
e8c21e4
Add numerical testing to existing layer and training tests
Copilot Dec 10, 2025
5fb98c0
Add more numerical verification to layer tests
Copilot Dec 10, 2025
4c0a2f8
Address code review feedback: improve documentation and use named con…
Copilot Dec 10, 2025
1119256
Merge pull request #165 from joaopauloschuler/copilot/improve-existin…
joaopauloschuler Dec 10, 2025
12f8dc9
Initial plan
Copilot Dec 10, 2025
eeb8694
Add comprehensive numerical testing for neural network operations
Copilot Dec 10, 2025
fac6ab3
Add 6 more numerical tests for dot product, normalization, and channe…
Copilot Dec 10, 2025
c9b31e1
Merge pull request #166 from joaopauloschuler/copilot/improve-existin…
joaopauloschuler Dec 10, 2025
70b32e3
Merge pull request #167 from joaopauloschuler/ai-coding
joaopauloschuler Dec 12, 2025
e92a18f
Initial plan
Copilot Dec 13, 2025
38ce19f
Add TNNetGELU and TNNetMish activation functions with tests
Copilot Dec 13, 2025
8920671
Add backpropagation tests for GELU and Mish, add numerical gradient c…
Copilot Dec 13, 2025
c67e53b
Fix numerical stability in Mish for large values, fix misleading comm…
Copilot Dec 13, 2025
3037ad2
Add explicit Backpropagate() overrides for TNNetGELU and TNNetMish
Copilot Dec 13, 2025
0194255
Adding note about experimental layers.
joaopauloschuler Dec 14, 2025
12a7256
Merge pull request #170 from joaopauloschuler/copilot/add-activation-…
joaopauloschuler Dec 14, 2025
1a1d9fe
Merge pull request #171 from joaopauloschuler/ai-coding
joaopauloschuler Dec 14, 2025
e097096
Update workspace folder and name in Docker configuration for neural-api
joaopauloschuler Dec 28, 2025
2ff97c5
Claude Opus 4.5 via GitHub copilot:
joaopauloschuler Dec 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
# Use the official devcontainer base image for Ubuntu 24.04

ENV DEBIAN_FRONTEND=noninteractive

# Install Free Pascal, fpc-source and Lazarus non-interactively and clean up
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
fpc \
fpc-source \
lazarus \
php \
build-essential \
|| true \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Ensure workspace folder exists (devcontainers typically mount the repo)
WORKDIR /workspaces/neural-api

# Use the default non-root user provided by the base image
USER vscode
19 changes: 19 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "neural-api: Free Pascal",
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"workspaceFolder": "/workspaces/neural-api",
"postCreateCommand": "fpc -v || true",
"remoteUser": "vscode",
"customizations": {
"vscode": {
"extensions": [
"alefragnani.pascal",
"davidanson.vscode-markdownlint",
"ms-vscode.vscode-container-tools"
]
}
}
}
55 changes: 55 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Tests

on:
push:
branches: [ master, main ]
pull_request:
branches: [ master, main ]

permissions:
contents: read

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install Free Pascal Compiler and LCL
run: |
sudo apt-get update
sudo apt-get install -y fpc lcl

- name: Find LazUtils path
id: lazutils
run: |
# Find the correct LazUtils path for the installed version
# Search in common Lazarus installation locations
LAZUTILS_PATH=$(find /usr/lib/lazarus /usr/share/lazarus -name "utf8process.ppu" -printf "%h\n" 2>/dev/null | head -1)
if [ -z "$LAZUTILS_PATH" ]; then
echo "Warning: LazUtils not found, falling back to basic tests only"
echo "path=" >> $GITHUB_OUTPUT
echo "found=false" >> $GITHUB_OUTPUT
else
echo "Found LazUtils at: ${LAZUTILS_PATH}"
echo "path=${LAZUTILS_PATH}" >> $GITHUB_OUTPUT
echo "found=true" >> $GITHUB_OUTPUT
fi

- name: Build Tests
run: |
mkdir -p bin
cd tests
if [ -n "${{ steps.lazutils.outputs.path }}" ]; then
fpc -Mobjfpc -Fu../neural -Fu${{ steps.lazutils.outputs.path }} -FE../bin -o../bin/RunTests RunTests.lpr
else
echo "Building without LazUtils - threading tests will be skipped"
fpc -Mobjfpc -Fu../neural -FE../bin -o../bin/RunTests RunTests.lpr
fi

- name: Run Tests
run: |
cd bin
./RunTests --all --format=plain
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,13 @@ experiments
opencl
libs
readme.txt

# Build artifacts
bin/
*.o
*.ppu
*.exe
*.compiled
*.bak
backup/
lib/
724 changes: 620 additions & 104 deletions README.md

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions docs/videos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
### Coding Neural Networks Easy - Youtube Videos
[![Watch the video](https://img.youtube.com/vi/aIy1S7clhQo/0.jpg)](https://youtu.be/aIy1S7clhQo) | [![Watch the video](https://img.youtube.com/vi/q56NcgUiAAk/0.jpg)](https://youtu.be/q56NcgUiAAk) | [![Watch the video](https://img.youtube.com/vi/PdNTgI_qSyo/0.jpg)](https://youtu.be/PdNTgI_qSyo)
--------------------------- | ------------------------------------- | -------------------------
Basics of Neural Networks in Pascal - Loading and Saving | Neural Networks for Absolute Beginners! Learning a Simple Function | Coding a Neural Network in Pascal that Learns to Calculate the Hypotenuse
[![Watch the video](https://img.youtube.com/vi/tODsv6Ks2DM/0.jpg)](https://youtu.be/tODsv6Ks2DM) | [![Watch the video](https://img.youtube.com/vi/f4T9IB-He_k/0.jpg)](https://youtu.be/f4T9IB-He_k) | [![Watch the video](https://img.youtube.com/vi/o-8NuoSsdck/0.jpg)](https://youtu.be/o-8NuoSsdck)
Pre-trained Neural Networks & Transfer Learning with Pascal's CAI Neural API | Coding a Neural Network in Pascal that Learns the OR Boolean Operation | A Dive into Identity Shortcut Connection - The ResNet building block
[![Watch the video](https://img.youtube.com/vi/SEvWB7k8uy0/0.jpg)](https://youtu.be/SEvWB7k8uy0) | [![Watch the video](https://img.youtube.com/vi/3QwIaAsDmJw/0.jpg)](https://youtu.be/3QwIaAsDmJw) | [![Watch the video](https://img.youtube.com/vi/VH6v3D5cxxs/0.jpg)](https://youtu.be/VH6v3D5cxxs)
Increasing Image Resolution with Neural Networks | Ultra Fast Single Precision Floating Point Computing | AVX and AVX2 Code Optimization
7 changes: 7 additions & 0 deletions docs/videos/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[![Watch the video](https://img.youtube.com/vi/aIy1S7clhQo/0.jpg)](https://youtu.be/aIy1S7clhQo) | [![Watch the video](https://img.youtube.com/vi/q56NcgUiAAk/0.jpg)](https://youtu.be/q56NcgUiAAk) | [![Watch the video](https://img.youtube.com/vi/PdNTgI_qSyo/0.jpg)](https://youtu.be/PdNTgI_qSyo)
--------------------------- | ------------------------------------- | -------------------------
Basics of Neural Networks in Pascal - Loading and Saving | Neural Networks for Absolute Beginners! Learning a Simple Function | Coding a Neural Network in Pascal that Learns to Calculate the Hypotenuse
[![Watch the video](https://img.youtube.com/vi/tODsv6Ks2DM/0.jpg)](https://youtu.be/tODsv6Ks2DM) | [![Watch the video](https://img.youtube.com/vi/f4T9IB-He_k/0.jpg)](https://youtu.be/f4T9IB-He_k) | [![Watch the video](https://img.youtube.com/vi/o-8NuoSsdck/0.jpg)](https://youtu.be/o-8NuoSsdck)
Pre-trained Neural Networks & Transfer Learning with Pascal's CAI Neural API | Coding a Neural Network in Pascal that Learns the OR Boolean Operation | A Dive into Identity Shortcut Connection - The ResNet building block
[![Watch the video](https://img.youtube.com/vi/SEvWB7k8uy0/0.jpg)](https://youtu.be/SEvWB7k8uy0) | [![Watch the video](https://img.youtube.com/vi/3QwIaAsDmJw/0.jpg)](https://youtu.be/3QwIaAsDmJw) | [![Watch the video](https://img.youtube.com/vi/VH6v3D5cxxs/0.jpg)](https://youtu.be/VH6v3D5cxxs)
Increasing Image Resolution with Neural Networks | Ultra Fast Single Precision Floating Point Computing | AVX and AVX2 Code Optimization
29 changes: 25 additions & 4 deletions examples/CaiOptimizedDenseNet/CaiOptimizedDenseNet.lpr
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ TTestCNNAlgo = class(TCustomApplication)
end;

bSeparable := HasOption('s', 'separable');
bPaddingCropping := HasOption('p', 'padding');
bPaddingCropping := true; // HasOption('p', 'padding');

iInnerConvNum := 12;
if HasOption('c', 'convolutions') then
Expand Down Expand Up @@ -123,16 +123,37 @@ TTestCNNAlgo = class(TCustomApplication)
NN.AddDenseNetBlockCAI(iInnerConvNum div 6, iConvNeuronCount, {supressBias=}1, TNNetConvolutionReLU, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeNorm=}nil, {pAfterNorm=}nil, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0, {RandomAdd=}1, {RandomMul=}1);
NN.AddCompression(1);
NN.AddLayer( TNNetMaxPool.Create(2) );
NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {supressBias=}1, TNNetConvolutionReLU, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeNorm=}nil, {pAfterNorm=}nil, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0, {RandomAdd=}1, {RandomMul=}1);
//NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {supressBias=}1, TNNetConvolutionReLU, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeNorm=}nil, {pAfterNorm=}nil, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0, {RandomAdd=}1, {RandomMul=}1);
NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {supressBias=}1, TNNetConvolutionLinear, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeBottleNeck=}nil, {pAfterBottleNeck=}TNNetSwish6, {pBeforeConv=}nil, {pAfterConv=}TNNetSwish6, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0);
NN.AddCompression(1);
NN.AddLayer( TNNetMaxPool.Create(2) );
NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {IsSeparable=}1, TNNetConvolutionReLU, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeNorm=}nil, {pAfterNorm=}nil, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0, {RandomAdd=}1, {RandomMul=}1);
//NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {IsSeparable=}1, TNNetConvolutionReLU, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeNorm=}nil, {pAfterNorm=}nil, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0, {RandomAdd=}1, {RandomMul=}1);
NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {supressBias=}1, TNNetConvolutionLinear, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeBottleNeck=}nil, {pAfterBottleNeck=}TNNetSwish6, {pBeforeConv=}nil, {pAfterConv=}TNNetSwish6, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0);
NN.AddCompression(1);
NN.AddLayer( TNNetDropout.Create(0.5) );
NN.AddLayer( TNNetMaxChannel.Create() );
NN.AddLayer( TNNetFullConnectLinear.Create(NumClasses) );
NN.AddLayer( TNNetSoftMax.Create({SkipBackpropDerivative=}1) );
NN.Layers[ NN.GetFirstImageNeuronalLayerIdx() ].InitBasicPatterns();
(*
// First block shouldn't be separable.
NN.AddDenseNetBlockCAI(iInnerConvNum div 6, iConvNeuronCount, {supressBias=}0, TNNetConvolutionReLU, {IsSeparable=}false, {HasMovingNorm=}HasMovingNorm, {pBeforeBottleNeck=}nil, {pAfterBottleNeck=}nil, {pBeforeConv=}nil, {pAfterConv=}TNNetReLU, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0);
NN.AddDenseNetBlockCAI(iInnerConvNum div 6, iConvNeuronCount, {supressBias=}0, TNNetConvolutionReLU, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeBottleNeck=}nil, {pAfterBottleNeck=}nil, {pBeforeConv=}nil, {pAfterConv=}TNNetReLU, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0);
NN.AddCompression(1);
NN.AddLayer( TNNetMaxPool.Create(2) );
NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {supressBias=}0, TNNetConvolutionLinear, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeBottleNeck=}nil, {pAfterBottleNeck=}TNNetSwish, {pBeforeConv=}nil, {pAfterConv=}TNNetSwish, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0);
NN.AddCompression(1);
NN.AddLayer( TNNetSwish.Create() );
NN.AddLayer( TNNetMaxPool.Create(2) );
NN.AddDenseNetBlockCAI(iInnerConvNum div 3, iConvNeuronCount, {IsSeparable=}0, TNNetConvolutionLinear, {IsSeparable=}bSeparable, {HasMovingNorm=}HasMovingNorm, {pBeforeBottleNeck=}nil, {pAfterBottleNeck=}TNNetSwish, {pBeforeConv=}nil, {pAfterConv=}TNNetSwish, {BottleNeck=}iBottleneck, {Compression=}0, {Dropout=}0);
NN.AddCompression(1);
NN.AddLayer( TNNetSwish.Create() );
NN.AddLayer( TNNetDropout.Create(0.25) );
NN.AddLayer( TNNetMaxChannel.Create() );
NN.AddLayer( TNNetFullConnectLinear.Create(NumClasses) );
NN.AddLayer( TNNetSoftMax.Create() );
NN.Layers[ NN.GetFirstImageNeuronalLayerIdx() ].InitBasicPatterns();
*)

WriteLn('Learning rate set to: [',fLearningRate:7:5,']');
WriteLn('Inertia set to: [',fInertia:7:5,']');
Expand Down Expand Up @@ -211,7 +232,7 @@ TTestCNNAlgo = class(TCustomApplication)
' -c : defines the number of convolutions. Default is 12.', sLineBreak,
' -b : defines the bottleneck. Default is 32.', sLineBreak,
' -n : defines convolutional neurons (growth rate). Default is 32.', sLineBreak,
' -p : enables padding and cropping data augmentation.', sLineBreak,
// ' -p : enables padding and cropping data augmentation.', sLineBreak,
' https://github.com/joaopauloschuler/neural-api/tree/master/examples/CaiOptimizedDenseNet',sLineBreak,
' More info at:',sLineBreak,
' https://github.com/joaopauloschuler/neural-api'
Expand Down
2 changes: 1 addition & 1 deletion examples/CaiOptimizedDenseNet/CaiOptimizedDenseNet48.lpr
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ TTestCNNAlgo = class(TCustomApplication)
NN.AddLayer( TNNetDropout.Create(0.25) );
NN.AddLayer( TNNetMaxChannel.Create() );
NN.AddLayer( TNNetFullConnectLinear.Create(NumClasses) );
NN.AddLayer( TNNetSoftMax.Create() );
NN.AddLayer( TNNetSoftMax.Create({SkipBackpropDerivative=}1) );
NN.Layers[ NN.GetFirstImageNeuronalLayerIdx() ].InitBasicPatterns();

WriteLn('Learning rate set to: [',fLearningRate:7:5,']');
Expand Down
174 changes: 174 additions & 0 deletions examples/CaiOptimizedDenseNet/kOptimizedDenseNet.lpi
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasCreateFormStatements Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<Title Value="CIFAR-10 Classification Example"/>
<UseAppBundle Value="False"/>
<ResourceType Value="res"/>
</General>
<i18n>
<EnableI18N LFM="False"/>
</i18n>
<BuildModes Count="3">
<Item1 Name="Default" Default="True"/>
<Item2 Name="Debug">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="..\..\bin\$(TargetCPU)-$(TargetOS)\bin\kOptimizedDenseNet"/>
</Target>
<SearchPaths>
<IncludeFiles Value="..\..\neural;$(ProjOutDir)"/>
<OtherUnitFiles Value="..\..\neural;$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS);$(LazarusDir)\components\lazutils\lib\$(TargetCPU)-$(TargetOS)"/>
<UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)\units"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<VerifyObjMethodCallValidity Value="True"/>
</CodeGeneration>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
<UseValgrind Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
</Linking>
<Other>
<CustomOptions Value="-dDebug
-dAVX"/>
<OtherDefines Count="3">
<Define0 Value="Debug"/>
<Define1 Value="AVX"/>
<Define2 Value="MakeQuick"/>
</OtherDefines>
</Other>
</CompilerOptions>
</Item2>
<Item3 Name="Release">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="..\..\bin\$(TargetCPU)-$(TargetOS)\bin\kOptimizedDenseNet"/>
</Target>
<SearchPaths>
<IncludeFiles Value="..\..\neural;$(ProjOutDir)"/>
<OtherUnitFiles Value="..\..\neural;$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS);$(LazarusDir)\components\lazutils\lib\$(TargetCPU)-$(TargetOS)"/>
<UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)\units"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
</Debugging>
<LinkSmart Value="True"/>
</Linking>
<Other>
<CustomOptions Value="-dRelease
-dAVX"/>
<OtherDefines Count="5">
<Define0 Value="Release"/>
<Define1 Value="Debug"/>
<Define2 Value="CheckRange"/>
<Define3 Value="AVX2"/>
<Define4 Value="AVX"/>
</OtherDefines>
</Other>
</CompilerOptions>
</Item3>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
</PublishOptions>
<RunParams>
<local>
<CommandLineParams Value="-a 3"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default">
<local>
<CommandLineParams Value="-a 3"/>
</local>
</Mode0>
</Modes>
</RunParams>
<RequiredPackages Count="1">
<Item1>
<PackageName Value="multithreadprocslaz"/>
</Item1>
</RequiredPackages>
<Units Count="1">
<Unit0>
<Filename Value="kOptimizedDenseNet.lpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="..\..\bin\$(TargetCPU)-$(TargetOS)\bin\kOptimizedDenseNet"/>
</Target>
<SearchPaths>
<IncludeFiles Value="..\..\neural;$(ProjOutDir)"/>
<OtherUnitFiles Value="..\..\neural;$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS);$(LazarusDir)\components\lazutils\lib\$(TargetCPU)-$(TargetOS)"/>
<UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)\units"/>
</SearchPaths>
<CodeGeneration>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
</Debugging>
</Linking>
<Other>
<CustomOptions Value="-dAVX
-dRelease"/>
<OtherDefines Count="2">
<Define0 Value="AVX"/>
<Define1 Value="Release"/>
</OtherDefines>
</Other>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>
Loading