基于Java实现CNN,并附MNIST和语音MFCC特征性别识别。
构建CNN
LayerBuilder builder = new LayerBuilder();
builder.addLayer(Layer.buildInputLayer(new Size(28, 28)));
builder.addLayer(Layer.buildConvLayer(6, new Size(5, 5)));
builder.addLayer(Layer.buildSampLayer(new Size(2, 2)));
builder.addLayer(Layer.buildConvLayer(12, new Size(5, 5)));
builder.addLayer(Layer.buildSampLayer(new Size(2, 2)));
builder.addLayer(Layer.buildOutputLayer(10));
CNN cnn = new CNN(builder, 50);
运行MNIST数据集
String fileName = "data/train.format";
Dataset dataset = Dataset.load(fileName, ",", 784);
cnn.train(dataset, 100);
Dataset testset = Dataset.load("data/test.format", ",", -1);
cnn.predict(testset, "data/test.predict");
计算精度可以达到97.8%。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-08-21 08:14 cnn-master
文件 45 2016-08-21 08:14 cnn-master.gitignore
文件 754 2016-08-21 08:14 cnn-masterREADME.md
目录 0 2016-08-21 08:14 cnn-mastermnist
文件 208 2016-08-21 08:14 cnn-mastermnist
eadme.md
文件 43904000 2016-08-21 08:14 cnn-mastermnist est.format
文件 18841570 2016-08-21 08:14 cnn-mastermnist rain.format
文件 3024 2016-08-21 08:14 cnn-masterpom.xml
目录 0 2016-08-21 08:14 cnn-masterspeech
目录 0 2016-08-21 08:14 cnn-masterspeechmodel
文件 16718 2016-08-21 08:14 cnn-masterspeechmodelmodel.cnn
文件 31110 2016-08-21 08:14 cnn-masterspeech est.format
文件 86 2016-08-21 08:14 cnn-masterspeech est.label
文件 86 2016-08-21 08:14 cnn-masterspeech est.predict
文件 144463 2016-08-21 08:14 cnn-masterspeech rain.format
目录 0 2016-08-21 08:14 cnn-mastersrc
目录 0 2016-08-21 08:14 cnn-mastersrcmain
目录 0 2016-08-21 08:14 cnn-mastersrcmainjava
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfo
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohb
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccn
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccnmain
文件 1887 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccnmainCNNMnist.java
文件 1681 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccnmainCNNSpeech.java
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnn
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnncore
文件 14926 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnncoreCNN.java
文件 5893 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnncorelayer.java
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnndata
文件 3714 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnndataDataSet.java
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnnutils
............此处省略17个文件信息
package info.hb.ccn.main;
import info.hb.cnn.core.CNN;
import info.hb.cnn.core.CNN.layerBuilder;
import info.hb.cnn.core.layer;
import info.hb.cnn.core.layer.Size;
import info.hb.cnn.data.DataSet;
import info.hb.cnn.utils.ConcurentRunner;
public class CNNMnist {
private static final String MODEL_NAME = “mnist/model/model.cnn“;
private static final String TRAIN_DATA = “mnist/train.format“;
private static final String TEST_DATA = “mnist/test.format“;
private static final String TEST_PREDICT = “mnist/test.predict“;
public static void main(String[] args) {
System.err.println(“训练阶段:“);
runTrain();
System.err.println(“测试阶段:“);
runTest();
ConcurentRunner.stop();
}
public static void runTrain() {
// 构建网络层次结构
layerBuilder builder = new layerBuilder();
builder.addlayer(layer.buildInputlayer(new Size(28 28))); // 输入层输出map大小为28×28
builder.addlayer(layer.buildConvlayer(6 new Size(5 5))); // 卷积层输出map大小为24×2424=28+1-5
builder.addlayer(layer.buildSamplayer(new Size(2 2))); // 采样层输出map大小为12×1212=24/2
builder.addlayer(layer.buildConvlayer(12 new Size(5 5))); // 卷积层输出map大小为8×88=12+1-5
builder.addlayer(layer.buildSamplayer(new Size(2 2))); // 采样层输出map大小为4×44=8/2
builder.addlayer(layer.buildOutputlayer(10));
CNN cnn = new CNN(builder 10);
// 加载训练数据
DataSet dataset = DataSet.load(TRAIN_DATA ““ 784);
// 开始训练模型
cnn.train(dataset 5);
// 保存训练好的模型
cnn.saveModel(MODEL_NAME);
dataset.clear();
}
public static void runTest() {
// 加载训练好的模型
CNN cnn = CNN.loadModel(MODEL_NAME);
// 加载测试数据
DataSet testSet = DataSet.load(TEST_DATA ““ -1);
// 预测结果
cnn.predict(testSet TEST_PREDICT);
testSet.clear();
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-08-21 08:14 cnn-master
文件 45 2016-08-21 08:14 cnn-master.gitignore
文件 754 2016-08-21 08:14 cnn-masterREADME.md
目录 0 2016-08-21 08:14 cnn-mastermnist
文件 208 2016-08-21 08:14 cnn-mastermnist
eadme.md
文件 43904000 2016-08-21 08:14 cnn-mastermnist est.format
文件 18841570 2016-08-21 08:14 cnn-mastermnist rain.format
文件 3024 2016-08-21 08:14 cnn-masterpom.xm
目录 0 2016-08-21 08:14 cnn-masterspeech
目录 0 2016-08-21 08:14 cnn-masterspeechmodel
文件 16718 2016-08-21 08:14 cnn-masterspeechmodelmodel.cnn
文件 31110 2016-08-21 08:14 cnn-masterspeech est.format
文件 86 2016-08-21 08:14 cnn-masterspeech est.label
文件 86 2016-08-21 08:14 cnn-masterspeech est.predict
文件 144463 2016-08-21 08:14 cnn-masterspeech rain.format
目录 0 2016-08-21 08:14 cnn-mastersrc
目录 0 2016-08-21 08:14 cnn-mastersrcmain
目录 0 2016-08-21 08:14 cnn-mastersrcmainjava
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfo
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohb
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccn
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccnmain
文件 1887 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccnmainCNNMnist.java
文件 1681 2016-08-21 08:14 cnn-mastersrcmainjavainfohbccnmainCNNSpeech.java
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnn
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnncore
文件 14926 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnncoreCNN.java
文件 5893 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnncorela
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnndata
文件 3714 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnndataDataSet.java
目录 0 2016-08-21 08:14 cnn-mastersrcmainjavainfohbcnnutils
............此处省略17个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)