Spaces:
Sleeping
Sleeping
File size: 2,070 Bytes
dfd3544 a4aa491 6b47160 eec3b88 a4aa491 eec3b88 a4aa491 dfd3544 eec3b88 554811e 59ae052 dfd3544 eec3b88 a4aa491 554811e eec3b88 dfd3544 554811e 59ae052 6b47160 59ae052 554811e 59ae052 554811e 6b47160 59ae052 6b47160 59ae052 6b47160 59ae052 6b47160 59ae052 6b47160 59ae052 6b47160 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
package nn
import (
"fmt"
"math/rand"
"strings"
"github.com/go-gota/gota/dataframe"
"github.com/gofiber/fiber/v2"
)
type NN struct {
CSVData string `json:"csv_data"`
Features []string `json:"features"`
Target string `json:"target"`
Epochs int `json:"epochs"`
HiddenSize int `json:"hidden_size"`
LearningRate float64 `json:"learning_rate"`
ActivationFunc string `json:"activation"`
TestSize float64 `json:"test_size"`
Df *dataframe.DataFrame
XTrain dataframe.DataFrame
YTrain dataframe.DataFrame
XTest dataframe.DataFrame
YTest dataframe.DataFrame
Wh [][]float64
Bh []float64
Wo [][]float64
Bo []float64
}
func NewNN(c *fiber.Ctx) (*NN, error) {
newNN := new(NN)
err := c.BodyParser(newNN)
if err != nil {
return nil, fmt.Errorf("invalid JSON data: %v", err)
}
df := dataframe.ReadCSV(strings.NewReader(newNN.CSVData))
newNN.Df = &df
return newNN, nil
}
func (nn *NN) Train() {
// train test split the data
_, _, _, _ = nn.trainTestSplit()
nn.InitWnB()
// iterate n times where n = nn.Epochs
// use backprop algorithm on each iteration
// to fit the model to the data
for i := 0; i < nn.Epochs; i++ {
}
}
func (nn *NN) InitWnB() {
// randomly initialize weights and biases to start
inputSize := len(nn.Features)
hiddenSize := nn.HiddenSize
outputSize := 1 // only predicting one thing
// input hidden layer weights
wh := make([][]float64, inputSize)
for i := range wh {
wh[i] = make([]float64, hiddenSize)
for j := range wh[i] {
wh[i][j] = rand.Float64() - 0.5
}
}
bh := make([]float64, hiddenSize)
for i := range bh {
bh[i] = rand.Float64() - 0.5
}
// initialize weights and biases for hidden -> output layer
wo := make([][]float64, hiddenSize)
for i := range wo {
wo[i] = make([]float64, outputSize)
for j := range wo[i] {
wo[i][j] = rand.Float64() - 0.5
}
}
bo := make([]float64, outputSize)
for i := range bo {
bo[i] = rand.Float64() - 0.5
}
nn.Wh = wh
nn.Bh = bh
nn.Wo = wo
nn.Bo = bo
}
|