現在、犬と猫の違いを伝えるCNNに取り組んでいます。InputおよびIdeal Double 2d配列でのBasicMLDataSetの初期化時のNullPointer例外
public bool trained = false;
public BasicNetwork network;
public Form1()
{
InitializeComponent();
}
[..]
private void trainNN()
{
double[][] input = LoadImages();
double[][] ideal = LoadIdeal();
var trainingSet = new BasicMLDataSet(input, ideal);
var train = new ResilientPropagation(network, trainingSet);
network = CreateNetwork();
}
private double[][] LoadImages()
{
status.Text = "Loading images...";
String[] dogimgs = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\dog_img\\", "*", SearchOption.TopDirectoryOnly);
String[] catimgs = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\cat_img\\", "*", SearchOption.TopDirectoryOnly);
int dogimgscount = dogimgs.Length;
int catimgscount = catimgs.Length;
int totalimgscount = dogimgscount + catimgscount;
double[][] images = new double[totalimgscount][];
for (int dogloop = 0; dogloop < dogimgscount; dogloop++)
{
status.Text = "Loading images... [" + (dogloop + 1) + "/" + totalimgscount + "]";
images[dogloop] = Image2Matrix(new Bitmap(dogimgs[dogloop]));
}
for (int catloop = 0; catloop < catimgscount; catloop++)
{
status.Text = "Loading images... [" + (catloop + dogimgscount) + "/" + totalimgscount + "]";
images[catloop + dogimgscount - 1] = Image2Matrix(new Bitmap(catimgs[catloop]));
}
status.Text = "Images loaded.";
return images;
}
private double[][] LoadIdeal()
{
String[] dogimgs = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\dog_img\\", "*", SearchOption.TopDirectoryOnly);
String[] catimgs = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\cat_img\\", "*", SearchOption.TopDirectoryOnly);
int dogimgscount = dogimgs.Length;
int catimgscount = catimgs.Length;
int totalimgscount = dogimgscount + catimgscount;
double[][] ideal = new double[totalimgscount][];
for (int dogloop = 0; dogloop < dogimgscount; dogloop++)
{
ideal[dogloop] = new[] { 0.0, 1.0 };
}
for (int catloop = 0; catloop < catimgscount; catloop++)
{
ideal[catloop + dogimgscount - 1] = new[] { 1.0, 0.0 };
}
return ideal;
}
私は、これは画像をロードするための賢い方法ではないかもしれないけど、私はちょうど私がパフォーマンスを高める開始する前に、コンセプトの作品を見たい:これは私がこれまでに出て働いているコードです。 dog_imgに2つ、cat_imgに2つ、画像が4つ置かれた場合、プログラムは画像を細かくロードし、入力と理想的な配列の長さは共に4であり、両方ともdouble値で埋められます。しかし、ライン上で
var trainingSet =新しいBasicMLDataSet(入力、理想);
プログラムはNullPointerExceptionエラーをスローします。どちらの配列も明示的に初期化され、空でも空でもないが、それでもエラーはスローされます。どんな助けもありがとうございます。ありがとうございました。 FritzFurtz