public static void CreateConvBatFile(string scriptName, string scriptsPath, string datasetPath, string modelPath, string labelPath, string plotPath, string networkName, int epoch, /*AutonomicParams ap,*/ int indexNumber, int mode) { string modeDir = string.Empty; if (mode == 0) { modeDir = @"\genetic\"; } else if (mode == 1) { modeDir = @"\custom\"; } DirectoryInfo di; // добавить безопасность созданию директорий // Models Directory di = Directory.CreateDirectory(@"C:\keras\folder"); string currentModelsDirectory = modelPath + modeDir + di.CreationTime.ToString("MM-dd-yyyy"); if (!Directory.Exists(currentModelsDirectory)) { Directory.Move(@"C:\keras\folder", currentModelsDirectory); } else { Directory.Delete(@"C:\keras\folder"); } // Labels Directory di = Directory.CreateDirectory(@"C:\keras\folder"); string currentLabelsDirectory = labelPath + modeDir + di.CreationTime.ToString("MM-dd-yyyy"); if (!Directory.Exists(currentLabelsDirectory)) { Directory.Move(@"C:\keras\folder", currentLabelsDirectory); } else { Directory.Delete(@"C:\keras\folder"); } // Plots Directory di = Directory.CreateDirectory(@"C:\keras\folder"); string currentPlotsDirectory = plotPath + modeDir + di.CreationTime.ToString("MM-dd-yyyy"); if (!Directory.Exists(currentPlotsDirectory)) { Directory.Move(@"C:\keras\folder", currentPlotsDirectory); } else { Directory.Delete(@"C:\keras\folder"); } string time = File.GetLastWriteTime(scriptsPath + @"\" + scriptName).ToString("HH-mm-ss"); string filenamePart = epoch + "-ep_" + indexNumber + "chr_" + networkName + "_" + time; //string currentTask = networkName; string code = @"C:\Users\Rinnetensei\Anaconda3\envs\keras\python.exe " + scriptsPath + @"\" + scriptName + " -d " + datasetPath + " -m " + currentModelsDirectory + @"\" + filenamePart + "_m -l " + currentLabelsDirectory + @"\" + filenamePart + "_l -p " + currentPlotsDirectory + @"\" + filenamePart + "_p.png"; try { File.Copy(@"C:\keras\Directory\scripts\train.bat", @"C:\keras\Directory\scripts\convolutional\temp_train.bat", true); Support.insertLineToFile(@"C:\keras\Directory\scripts\convolutional\temp_train.bat", 3, code); } catch (Exception ex) { //MessageBox.Show(ex.Message); } }
public static void InsertConvNetworkCode(String path, int line, ConvolutionalNetwork network, List <String> convActivations, List <String> denseActivations) { string loss_function = "\"categorical_crossentropy\""; if (network.outputs == 2) { loss_function = "\"binary_crossentropy\""; } string init_lr = network.trainConstSpeed.ToString(); init_lr = init_lr.Replace(",", "."); string callbacks_str = ""; string code = ""; for (int i = 0; i < network.filters.Count; i++) { if (i == 0) { code += "model.add(ZeroPadding2D((1, 1), input_shape = (128, 128, 3)))" + Environment.NewLine; } code += "model.add(Conv2D(" + network.filters[i].ToString() + ", kernel_size = (" + network.slidingWindows[i][0].ToString() + ", " + network.slidingWindows[i][1].ToString() + "), strides = (1, 1), padding='same', activation = '" + convActivations[network.convActivationIndexes[i]] + "'))" + Environment.NewLine; code += "model.add(MaxPooling2D(pool_size = (2, 2), strides = (2, 2)))" + Environment.NewLine; } code += "model.add(Flatten())" + Environment.NewLine; int dropoutCounter = 0; for (int i = 0; i < network.neurons.Count; i++) { code += "model.add(Dense(" + network.neurons[i].ToString() + ", activation = '" + denseActivations[network.denseActivationIndexes[i]] + "'))" + Environment.NewLine; if (network.denseDropoutIndexes.Count > 0) { if (network.denseDropoutIndexes[dropoutCounter] == i) { code += "model.add(Dropout(" + ((float)network.denseDropoutRates[dropoutCounter] / 100).ToString() + "))" + Environment.NewLine; if ((network.denseDropoutIndexes.Count - 1) != dropoutCounter) { dropoutCounter++; } } } } if (network.outputs == 2) { code += "model.add(Dense(2, activation = \"softmax\"))" + Environment.NewLine; } else { code += "model.add(Dense(len(lb.classes_), activation = \"softmax\"))" + Environment.NewLine; } code += "INIT_LR = " + init_lr + Environment.NewLine + "EPOCHS = " + network.networkLearningEpochs.ToString() + Environment.NewLine + "BS = " + network.batchSize.ToString() + Environment.NewLine + Environment.NewLine; code += "print(\"[INFO] training network...\")" + Environment.NewLine; code += "opt = SGD(lr=INIT_LR)" + Environment.NewLine; code += "model.compile(loss=" + loss_function + ", optimizer=opt, metrics=[\"acc\"])" + Environment.NewLine; //code += "" + Environment.NewLine; Support.insertLineToFile(path, line, code); string forBinaryCode = "trainY = to_categorical(trainY)" + Environment.NewLine + "testY = to_categorical(testY)" + Environment.NewLine; if (network.outputs == 2) { Support.insertLineToFile(path, 66, forBinaryCode); } }