質問: spliteachlabel(imds,0.7); という一文がありますが、なぜ、テストデータを使わずにバリデーションデータを使うのでしょうか。 imdsvalidationではなく、imdstestだと納得できるのですが不思議です。 もしバリデーションデータを使うのであれば、テストデータは使わなくてもいいかご教示頂けますと幸いです。
回答: 単に、ここではバリデーションデータをテストデータと読み替えて問題ないと思います。また、以下のように、 [imdstrain,imdsvalidation, imdstest] = spliteachlabel(imds,0.7,0.2); などとして、画像を訓練、バリデーション、テストデータに分けると良いかもしれません。 リンクの学習曲線のところでは、バリデーションデータを使います。 そして、最後のところで [ypred,probs] = classify(net,imdstest); accuracy = mean(ypred == imdstest.labels) とすると、テストデータで正答率を計算できます。ここで、optionsのところに 'validationpatience', 3 を追加すれば学習の早期終了ができます。「'validationpatience' の値は、ネットワークの学習が停止するまでに、検証セットでの損失が前の最小損失以上になることが許容される回数です。」 とあります。学習がある程度のところで限界が来たらそこで学習がストップするので学習時間を短縮できたり、過学習が抑えられる可能性があります。