Я знаю, что это копия этой темы: Как хранить данные о знаниях нейронной сети?
Но так как это не помогло мне, я спрашиваю снова, надеясь получитьответ.
Я использую ту же библиотеку, что и парень из другого потока (synaptics.js).
Как сохранить веса нейронных сетей после обучения их в файл JSON?Он не отображается в моей файловой директории после использования следующего метода, как описано в документации по синаптикам:
var exported = myNetwork.toJSON();
var imported = Network.fromJSON(exported);
Я понятия не имею, что с этим делать.
Я хочубыть в состоянии сохранять и загружать в сеть без необходимости обучать его каждый раз, когда я хочу его использовать.
Я все еще любитель, когда дело доходит до кода, но вот все, что я сделал до сих пор:
//SAVESTATE switch
var saveState = true;
// DEBUGGING I/O SWITCH
var debug = false;
//Defining synaptic variables
var Layer = synaptic.Layer;
var Network = synaptic.Network;
var Trainer = synaptic.Trainer;
//Defining network layers
var inputLayer = new Layer(784);
var hiddenLayer = new Layer(100);
var outputLayer = new Layer(10);
//Projecting layers
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
//Structuring the network
var myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
//DEBUG
if (debug == true) {
console.log("Network created.")
}
//Defining trainingset
var set = mnist.set(700, 200);
var trainingSet = set.training;
var testSet = set.test;
var trainer = new Trainer(myNetwork);
//rmnh
var drawPos;
if (saveState = true) {
Network.fromJSON(myNetwork.toJSON());
}
//DEBUG
if (debug == true) {
console.log("Trainer ready.");
console.log("RANDOM NUMBER: " + generateNum(0, testSet.length));
}
/*
* MAIN NEURAL NETWORK FUNCTION
*
* Used for
*/
function neuralNetwork(iterations) {
//DEBUG
if (debug == true) {
console.log("Training network.")
}
//Start training
trainer.train(trainingSet, {
rate: .2,
iterations: iterations,
error: .1,
shuffle: true,
log: 1,
cost: Trainer.cost.CROSS_ENTROPY
});
//DEBUG
if (debug == true) {
console.log("Network done training.")
console.log(myNetwork.activate(testSet[0].input));
console.log(testSet[0].output);
}
};
function setup() {
var canvas = createCanvas(56, 56);
canvas.parent('canvas');
background(50);
}
function testNN() {
drawPos = 0;
var screenX = 0;
var screenY = 0;
var rnum = generateNum(0, testSet.length);
var randomNum = rnum
if (debug == true) {
console.log(randomNum);
}
for (screenY = 0; screenY < 56; screenY += 2) {
for (screenX = 0; screenX < 56; screenX += 2) {
generatePixel(screenX, screenY, drawPos, randomNum);
drawPos++
}
}
var array = testSet[randomNum].input;
var arrayResult = myNetwork.activate(array);
var largest = Math.max.apply(Math, arrayResult);
var result = arrayResult.indexOf(largest);
var fakeResult = testSet[randomNum].output;
//DEBUG
if (debug == true) {
console.log(myNetwork.activate(testSet[randomNum].input));
}
for (var i = 0; i < fakeResult.length; i++) {
if (fakeResult[i] != 0) {
document.getElementById('fakeResult').innerHTML = "<span class='h2'>" + i + "</span>";
}
}
document.getElementById('result').innerHTML = "<span class='h2'>" + result + "</span>"
myNetwork.toJSON();
}
function generatePixel(x, y, pos, val) {
strokeWeight(0);
var c = testSet[val].input[drawPos];
c = c * 100
var greyScale = color(c);
if (debug == true) {
console.log(c);
console.log(drawPos);
}
fill(greyScale);
var x2 = x + 1
var y2 = x + 1
rect(x, y, x2, y2);
}
//Function for generating a random number
function generateNum(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
function formSubmit() {
if (debug == true) {
console.log("Form Submitted. Awaiting network.");
}
var a = document.getElementById('iterations').value;
neuralNetwork(a);
}
body {
margin: 0;
}
#header {
background-color: #FFFFFF;
min-height: 90px;
border-bottom: 5px;
border-bottom-color: #000000;
border-bottom-style: solid;
}
#container {
}
#interface {
display: inline-block;
float: left;
}
#footer {
}
#interfaceText {
padding-top: 19px;
margin-right: 10px;
float: left;
}
#canvas {
float: left;
}
.h1 {
color: #000000;
font-size: 50px;
font-family: Verdana;
margin: 16px 0px 0px 16px;
position: absolute;
cursor:context-menu;
}
.h2 {
color: #000000;
font-size: 15px;
font-family: Verdana;
cursor:context-menu;
}
<!DOCTYPE HTML>
<html>
<head>
<script src="scripts/node_modules/synaptic/dist/synaptic.js">
</script>
<script src="scripts/p5.js"></script>
<script src="scripts/node_modules/mnist/dist/mnist.js"></script>
<link rel="stylesheet" href="stylesheets/main.css">
</head>
<body>
<section id="header">
<span class="h1">Neural Network</span>
</section>
<section id="container">
<form id="form">
<span class="h2">Training:</span><br>
<span>Iterations:</span>
<input id="iterations" placeholder="20">
</form>
<div id="button"><button onclick="formSubmit()">Submit</button></div>
<script src="scripts/network.js"></script>
<br>
</section>
<section id="interface">
<div id="interfaceText">
<span class="h2">Current picture: </span>
</div>
<div id="canvas">
</div><br><br><br><br>
<div id="interfaceText">
<span class="h2">Network result:</span>
</div>
<div id="result">
<span class="errorText">This feature will be buggy if the network is not trained</span>
</div><br><br>
<div id="interfaceText">
<span class="h2">Real value:</span>
</div>
<div id="fakeResult">
</div><br><br><br>
<div id="button">
<button onclick="testNN()">Generate</button>
</div>
</section>
<section id="footer">
</section>
</body>
</html>
Пожалуйста, помогите:)