public IpfsJob(string input, string target, JToken model, IpfsJobConfig config) { this.input = input; this.target = target; this.Model = model; this.config = config; }
public void Run(int inputId, int targetId, List <GridConfiguration> configurations, MonoBehaviour owner) { Debug.Log("Grid.Run"); string ipfsHash = ""; var inputTensor = controller.floatTensorFactory.Get(inputId); var targetTensor = controller.floatTensorFactory.Get(targetId); // write the input and target tensors to Ipfs var inputJob = new Ipfs(); var targetJob = new Ipfs(); var inputIpfsResponse = inputJob.Write(inputTensor.GetConfig()); var targetIpfsResponse = targetJob.Write(targetTensor.GetConfig()); Debug.Log("Input Hash: " + inputIpfsResponse.Hash); Debug.Log("Target Hash: " + targetIpfsResponse.Hash); var jobs = new string[configurations.Count]; for (var i = 0; i < configurations.Count; ++i) { var config = configurations[i]; var model = controller.getModel(config.model) as Sequential; var serializedModel = model.GetConfig(); var configJob = new Ipfs(); var ipfsJobConfig = new IpfsJobConfig(config.lr); var response = configJob.Write(new IpfsJob(serializedModel, ipfsJobConfig)); jobs[i] = response.Hash; } var experiment = new IpfsExperiment(inputIpfsResponse.Hash, targetIpfsResponse.Hash, jobs); var experimentWriteJob = new Ipfs(); var experimentResult = experimentWriteJob.Write(experiment); var request = new Request(); owner.StartCoroutine(request.AddModel(owner, experimentResult.Hash)); PollNext(owner, request); }
public string Run(int inputId, int targetId, List <GridConfiguration> configurations, MonoBehaviour owner) { Debug.Log("Grid.Run"); var inputTensor = controller.floatTensorFactory.Get(inputId); var targetTensor = controller.floatTensorFactory.Get(targetId); // write the input and target tensors to Ipfs var inputJob = new Ipfs(); var targetJob = new Ipfs(); var inputIpfsResponse = inputJob.Write(inputTensor.GetConfig()); var targetIpfsResponse = targetJob.Write(targetTensor.GetConfig()); Debug.Log("Input Hash: " + inputIpfsResponse.Hash); Debug.Log("Target Hash: " + targetIpfsResponse.Hash); var jobs = new string[configurations.Count]; for (var i = 0; i < configurations.Count; ++i) { var config = configurations[i]; var model = controller.GetModel(config.model) as Sequential; var serializedModel = model.GetConfig(); var configJob = new Ipfs(); var ipfsJobConfig = new IpfsJobConfig(config.lr, config.criterion, config.iters); var response = configJob.Write(new IpfsJob(inputIpfsResponse.Hash, targetIpfsResponse.Hash, serializedModel, ipfsJobConfig)); jobs[i] = response.Hash; } var experiment = new IpfsExperiment(jobs); var experimentWriteJob = new Ipfs(); var experimentResult = experimentWriteJob.Write(experiment); BlockChain chain = Camera.main.GetComponent <BlockChain>(); owner.StartCoroutine(chain.AddExperiment(experimentResult.Hash, jobs)); experiments.Add(experimentResult.Hash); return(experimentResult.Hash); }
public void TrainModel(MonoBehaviour owner, string input, string target, IpfsJob job, int modelId) { var tmpInput = Ipfs.Get <JToken>(input); var tmpTarget = Ipfs.Get <JToken>(target); var seq = CreateSequential(job.Model); var inputData = tmpInput.SelectToken("data").ToObject <float[]>(); var inputShape = tmpInput.SelectToken("shape").ToObject <int[]>(); var inputTensor = controller.floatTensorFactory.Create(_data: inputData, _shape: inputShape, _autograd: true); var targetData = tmpTarget.SelectToken("data").ToObject <float[]>(); var targetShape = tmpTarget.SelectToken("shape").ToObject <int[]>(); var targetTensor = controller.floatTensorFactory.Create(_data: targetData, _shape: targetShape, _autograd: true); var grad = controller.floatTensorFactory.Create(_data: new float[] { 1, 1, 1, 1 }, _shape: new int[] { 4, 1 }); // 10 epochs .. make configurable for (var i = 0; i < 10; ++i) { var pred = seq.Forward(inputTensor); var loss = pred.Sub(targetTensor).Pow(2); loss.Backward(grad); foreach (var p in seq.getParameters()) { var pTensor = controller.floatTensorFactory.Get(p); pTensor.Sub(pTensor.Grad, inline: true); } } var resultJob = new Ipfs(); var config = new IpfsJobConfig(job.config.lr); var response = resultJob.Write(new IpfsJob(seq.GetConfig(), config)); var req = new Request(); owner.StartCoroutine(req.AddWeights(owner, modelId, response.Hash)); }
public IpfsJob(JToken model, IpfsJobConfig config) { this.Model = model; this.config = config; }