【问题标题】:AI::MXNet (Perl API) : how to fit() a zoo modelAI::MXNet (Perl API):如何拟合()动物园模型
【发布时间】:2020-02-10 09:42:47
【问题描述】:

我正在尝试使用 MXNet (AI::MXNet) 的 Perl API 从 ModelZoo (AI::MXNet::Gluon::ModelZoo::Vision) 获取标准模型并对其进行训练。

以下代码没有抱怨,但它不适合()。 fit() 立即返回。我的数据集是一个 RecordIO 格式的图像文件(使用 im2rec 构建),我很确定它是有效的。

我已经从https://codehex.hateblo.jp/entry/2017/09/12/160149 修改了代码,原作者在这里象征性地创建了模型(而不是来自 ModelZoo)。

原则上,这是从 ModelZoo 训练模型的正确方法吗?

第二个问题是从一组图像创建数据加载器的最佳做法是什么。我在做什么(使用mx->io->ImageRecordIter)可以吗?

use strict;
use warnings;

use AI::MXNet qw/mx/;

use AI::MXNet::Gluon qw/gluon/; # needed for nn-> (which must be replaced by gluon->nn->...)
use AI::MXNet::Gluon::NN qw(nn); # for nn->
use AI::MXNet::Gluon::ModelZoo::Vision::VGG;
use AI::MXNet::Monitor;

my $ctx = mx->cpu(0);

my $vgg = AI::MXNet::Gluon::ModelZoo::Vision->get_vgg(
    11, # num layers
    (
        'classes' => 26, # latin alphabet recognition
        'root' => 'abc', # where to save the models
        'ctx' => $ctx # context
    )
);
die "get the model" unless defined $vgg;

my $batch_size = 4;
# num channels, width, height our png training images of letters:
my $img_shape = [3, 256, 256];
my $training_file = 'training.bin';
my $train_dataiter = mx->io->ImageRecordIter({
    'path_imgrec' => $training_file,
    'path_imglist' => 'training.lst',
    # num channels, width, height
    'data_shape' => $img_shape,
    'batch_size' => $batch_size,
    'label_width' => 1, # dimensionality of labels, for us is 1 (i.e. just the letter name)
});
die "mx->io->ImageRecordIter()" unless defined $train_dataiter;

$vgg->init_params(initializer => mx->init->Xavier(magnitude => 2));
$vgg->init_optimizer(optimizer => 'sgd', optimizer_params => {learning_rate => 0.1});
$vgg->initialize();

print "$0 : fitting ...\n";
$vgg->fit(
    $train_dataiter,
    'num_epoch' => 1000
);

【问题讨论】:

    标签: perl mxnet


    【解决方案1】:

    等待训练不是正确的。 ModelZoo 返回一个 Gluon Hybrid 块。 'fit' 用于模块接口。 了解如何使用 Gluon 进行训练:

    https://metacpan.org/source/SKOLYCHEV/AI-MXNet-1.4/examples/gluon/mnist.pl

    与模块相同: https://metacpan.org/source/SKOLYCHEV/AI-MXNet-1.4/examples/mnist.pl

    你可以调用混合块的 ->export 方法,如 $vgg->export(); https://metacpan.org/source/SKOLYCHEV/AI-MXNet-1.4/lib/AI/MXNet/Gluon/Block.pm#L1242

    这会将网络的 json 结构和当前参数保存到文件中。 然后就可以从这些初始化Module接口了。

    【讨论】:

    • Hito Yume 谢谢!我需要使用我的自定义数据,这些数据是字母的图像。我对模型或胶子是否灵活。我不知道如何使用您在我的 dataiter 中引用的第一个示例,也不知道如何将第二个示例与一些现成的光学字符识别解决方案一起使用。你有更多关于如何使用来自 ModelZoo 的 Gluon 的 dataiter 的信息吗?您有关于导出和导入参数的任何信息吗?在export() 方法中它说向前移动一次?你是怎样做的?摘要:如果你有的话,我需要很多例子。
    • 我发布的胶子示例可以像我认为的任何迭代器一样工作,因为它们都具有相同的接口。前向操作只是将胶子块作为子程序调用,其中 NDArray(转换后的图像)为 $vgg->($image_nd_array); .请参阅此页面上的犬种分类示例blogs.perl.org/users/sergey_kolychev/2018/07/…
    • 如果您愿意发布一些带有自定义训练数据的代码,也许与我发布的代码类似,那将会很有帮助。我已经阅读并尝试了您多次发布的链接,它们与一些我没有的用例相关联。我试图适应我的用例,但是......如果可以的话,请发布一些框架代码。
    • 谢谢@Hito Yume。我并不是说您必须让我的代码正常工作,但如果您已经有一些代码可以工作并且可以与我分享,我将不胜感激。请不要花时间在这上面,除非你已经有一些你想分享的个人例子。如果我听起来有点紧迫,我很抱歉。只是我已经尝试了链接。所以,感谢您的输入,如果您已经有一些工作代码,请分享,否则如果您有更好的事情要做,请不要花更多时间在上面...感谢 Hito Yume
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多