/BP-CNN

Java implementation of BP, CNN

Primary LanguageJava

BP-CNN

  • AI Lab1
  • Java实现BP神经网络,用于识别液晶数字、拟合正弦函数
  • Java实现CNN,用于手写体识别
  • 基于Keras实现CNN,用于手写体识别
  • 数据集已被忽略

实验目标

  • 实现反向传播神经网络,训练下列两个应用的反向传播神经网络:一是识别液晶数字字体LcdD表示哪个数字的分类问题,二是拟合正弦函数的回归问题。
  • 实现反向传播神经网络和卷积神经网络,训练能够识别字母的神经网络。

名词解释

  • 超参数 超参数指决定网络配置的参数,包括学习率、隐藏层大小、迭代次数等。超参数指机器学习模型里面的框架参数。神经网络的超参数包括学习率、隐藏层单元数、训练迭代次数等。 超参数不同于训练过程中学习的参数(权重),通常是手工设定,不断试错调整。
  • 训练集、验证集、测试集
    • 训练集指学习样本数据集,用于训练模型的权重参数。
    • 验证集用于调整模型的超参数,但是不调整模型的权重参数。验证集还可以用于防止过拟合,如果随着训练的进行,训练集的准确度增加,但验证集的准确度反而下降,则表示过 拟合,应提前停止训练。 测试集用于测试训练好的模型的分辨能力,即模型的泛化性能。测试集只有在测试模型 时才能使用,在训练模型的过程中是看不到测试集的。
    • 数据集划分的概念可以和高考及考前训练和模拟考作类比。
    • 备战高考阶段,学生需要做大量的练习,并参加多次模拟考,最后参加一次正式的高考。 理想情况下,练习题、模拟考和高考的题目是没有重合的。做的练习题是训练集,模拟考题 是验证集,高考题是测试集。学生备战高考,需要做大量的练习题,这是学习或者训练过程。 为了检验学生是否真正掌握知识点,高考题必须和学生做过的练习题和模拟考题没有重合, 即高考题应避免已经出现过的题,高考是测试过程。高考只有一次,在高考之前需要多次检 验学生的学习成果,这需要通过模拟考进行检验(理想情况下,模拟考题应该和练习题没有 重合),模拟考是验证过程,根据模拟考的结果调整学习策略。

实验要求

  • 识别液晶数字字体的分类问题的任务中,每个数字由七段码表示。输入为七个数字 0 或 1,对应七段码的每一段分别是否显示,1 表示显示,0 表示不显示,输入的七段码的顺 序为:左下、左上、正上、右上、右下、正下、正中。每个数字对应的七段码分别如下,请 同学们使用标准的七段码进行训练。
    - 数字 0: 1 1 1 1 1 1 0 
    - 数字 1: 0 0 0 1 1 0 0 
    - 数字 2: 1 0 1 1 0 1 1 
    - 数字 3: 0 0 1 1 1 1 1  
    - 数字 4: 0 1 0 1 1 0 1 
    - 数字 5: 0 1 1 0 1 1 1 
    - 数字 6: 1 1 1 0 1 1 1 
    - 数字 7: 0 0 1 1 1 0 0
    - 数字 8: 1 1 1 1 1 1 1
    - 数字 9: 0 1 1 1 1 1 1
    
  • 拟合正弦函数的回归问题的任务中,输入为弧度值,输出为输入弧度值对应的正弦值(例如,sin 1.57 约等于 1)。输入值的范围为-π/2 到 π/2。请同学们在此输入值的范围 内随机生成训练样本进行训练。
  • 识别字母的任务中,所需要识别的字母包括字母 A 至 H 共 8 个字母,均为 png 格式 的图片文件,图片文件的尺寸均为 28px*28px。需要事先将 png 文件转化成文本文件,转化 的代码和图片文件都已上传,请同学们自行转化以后进行训练和测试(转化的代码供参考, 可自行处理,但是对所有数据集的处理应保持一致)。