动手学深度学习之线性神经网络-Softmax 回归JAVA DJL 版

深度学习框架有现成方法可以直接使用
步骤基本上一致

    /**
     * 获取数据
     * @param filePath CSV文件路径
     * @return NDArray[] 数据集
     */
  public static NDArray[] getData( NDManager manager,String filePath){
      Table data = Table.read().file(filePath);
      Table inputs = data.create(data.columns());
      inputs.removeColumns("index","y");
      Table outputs =  data.select("y");
      NDArray features = manager.create(inputs.as().floatMatrix());
      NDArray labels = manager.create(outputs.as().floatMatrix());
      return new NDArray[] {features, labels};
  }


  /**
   * 获取数据集
   * @param x 特征数据
   * @param y 标签数据
   * @param batchSize 批量大小
   * @return ArrayDataset 数据集
   */
   public static ArrayDataset getIrisData(NDArray x,NDArray y ,int batchSize){
        return new ArrayDataset.Builder()
                .setData(x)
                .optLabels(y)
                .setSampling(batchSize, true) // 批量大小为,随机采样
                .build();
    }
// 定义损失函数
  Loss loss = Loss.softmaxCrossEntropyLoss();
//优化算法
  Tracker lrt = Tracker.fixed(lr);
  Optimizer sgd = Optimizer.sgd().setLearningRateTracker(lrt).build();
//初始模型配置
  DefaultTrainingConfig config = new DefaultTrainingConfig(loss);
  config.optOptimizer(sgd);//优化算法
  config.optDevices(Engine.getInstance().getDevices(1));//优化指定 GPU 或 CPU
  config.addTrainingListeners(TrainingListener.Defaults.logging());//监听 
//定义模型
 Model model = Model.newInstance("softmax-ir-test");
 SequentialBlock net = new SequentialBlock();
 net.add(Blocks.batchFlattenBlock(numInputs)); //输入
 net.add(Linear.builder().setUnits(numOutputs).build()); //输出
 model.setBlock(net); 
 //训练模型
 Trainer trainer = model.newTrainer(config);
 trainer.initialize(new Shape(1, numInputs));  
 //记录训练性能的一些指标,非必须
 Metrics metrics = new Metrics();
 trainer.setMetrics(metrics);
    for (int i = 0; i < numEpochs; i++){
            for (Batch batch : trainer.iterateDataset(getIrisData(features, labels, bathSize))) {
                EasyTrain.trainBatch(trainer, batch);
                trainer.step();
                batch.close();
            }
        }
 TrainingResult result = trainer.getTrainingResult();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值