public void TrainNetwork(NetworkModel network, NetworksStorageModel storage, QueryDataFormat dataFormat, TaskProgressVM taskProgressVM = null) { if (taskProgressVM != null) { taskProgressVM.EndValue = TrainDatas.Count; taskProgressVM.TaskName = "Training network"; } if (network.Generation == 0) { SaveHistory(network); } Parallel.ForEach(TrainDatas, (model) => { var trainData = new MNIST28x28TrainData(model); network.Train(trainData); if (taskProgressVM != null) { taskProgressVM.Value++; } }); network.Generation++; SaveHistory(network); _workshopModel.SaveStorageAsync(storage.Id.ToString()); }
private void SaveHistory(NetworkModel networkModel) { var historyData = new TrainHisoryData() { Generation = networkModel.Generation, NetworkData = networkModel.GetNetworkData() }; string networkFolderPath = Path.Combine(_workshopModel.WorkingFolder, _workshopModel.GetStorageModel(networkModel.StorageId.ToString()).Name, "Networks"); _fileService.SaveToFileAsync <TrainHisoryData>(historyData, networkFolderPath, new TrainHistoryDataSaveStrategy()); }
public string QueryNetwork(NetworkModel network, QueryDataModel queryData, QueryDataFormat dataFormat) { switch (dataFormat) { case QueryDataFormat.BlackMNIST28x28: var outputs = network.Query(queryData.InputValues); return(queryData.Marker = Array.IndexOf(outputs, outputs.Max()).ToString()); default: return("Bad request"); } }
public async void LoadNetworkAsync(string fileName) { if (string.IsNullOrEmpty(fileName)) { return; } var data = await _fileService.ReadFromFileAsync <NetworkDataModel>(fileName, new NetworkDataModelReadStrategy()); var networkModel = new NetworkModel(data); DefaultStorage.AddInstance(networkModel); }
public QueryDataModel BackQuery(NetworkModel network, QueryDataModel targetData, QueryDataFormat dataFormat) { switch (dataFormat) { case QueryDataFormat.BlackMNIST28x28: var inputs = network.BackQuery(targetData.OutputValues); var data = new QueryDataModel() { InputValues = inputs, Marker = targetData.Marker, OutputValues = targetData.OutputValues }; var readyData = new MNIST28x28BackQueryData(data); return(readyData); default: return(null); } }
public void AddInstance(NetworkModel nNetworkInstance) { int currentInputsCounts = nNetworkInstance.Layers[0]; int currentOutputsCount = nNetworkInstance.Layers[nNetworkInstance.Layers.Length - 1]; if (!IsStrict) { if (Networks.Count == 0 && StorageConstraints is null) { StorageConstraints = new NetworkStorageConstraints(currentInputsCounts, currentOutputsCount); } if (currentInputsCounts != StorageConstraints.InputsCount || currentOutputsCount != StorageConstraints.OutputsCount) { throw new ArgumentException("Invalid network properties"); } } Networks.Add(nNetworkInstance); OnPropertyChanged(nameof(Networks)); }