Mathemtica 机器学习 卷积神经网络(1)
卷积神经网络 关于卷积 可以抽象成数学表达式: I可以表示一张图像的矩阵,K是卷积核 卷积的计算层 Object Recogition with Gradient-Based Learning 输入层 Input Layer 卷积层 Conv Layer 限定层 RELU Layer 池化层 Pooling Layer 全连接层 Full connected Layer 创建网络 基础学习分辨猫狗归类 (* 创建模型 *) myCatDogModel = NetChain[{ ConvolutionLayer[32, 3], Ramp, PoolingLayer[2, 2], ConvolutionLayer[64, 3], Ramp, PoolingLayer[2, 2], FlattenLayer[], 128, Ramp, 2, SoftmaxLayer[]}, "Input" -> NetEncoder[{"Image", {224, 224}, ColorSpace -> "RGB"}] , "Output" -> NetDecoder[{"Class", {"cat", "dog"}}]] (* 收集样本,训练集和测试集合 *) (* 转换数据集合为Association格式 *) dataSetsConvert[dateSets_] := Module[ {}, File[#] -> StringSplit[FileBaseName[#], "."][[1]] & /@ dateSets] traingDataFiles = RandomSample[dataSetsConvert[traingData]]; testDataFiles = RandomSample[dataSetsConvert[testData]]; SetDirectory[ "/Users/alexchen/datasets/Convolutional_Neural_Networks/dataset"]; FileNames["*.jpg", "training_set/cats/"]; FileNames["*.jpg", "training_set/dogs/"]; traingData = Join[FileNames["*.jpg", "training_set/cats/"], FileNames["*.jpg", "training_set/dogs/"]]; testData = Join[FileNames["*.jpg", "test_set/cats"], FileNames["*.jpg", "test_set/dogs"]]; (* 生成训练集和验证集 *) traingDataFiles = RandomSample[dataSetsConvert[traingData]]; testDataFiles = RandomSample[dataSetsConvert[testData]]; (* 样本随机抽取显示 *) RandomSample[traingDataFiles, 5] (* 训练模型 *) mytrainedModel = NetTrain[catdogModel, traingDataFiles, All, ValidationSet -> testDataFiles, MaxTrainingRounds -> 20] (* 生成训练模型评估报告 *) myModelPlot = mytrainedModel["FinalPlots"] (* 生成训练得到的模型计算模型正确率 *) myTrainedNet = mytrainedModel["TrainedNet"] ClassifierMeasurements[myTrainedNet, testDataFiles, "Accuracy"] ...