質問: dagネットワークにおける複数入力について 複数入力のdagネットワークの設計を考えています。 下記図はイメージです。 上記のような複数のimageinputにそれぞれ異なる画像を入力したいと考えています。 trainnetworkの関数を用いる際、どのように書いて、指定すればよろしいでしょうか? よろしくお願いいたします。
回答: こんにちは。 複数入力一出力の場合(multi input signle output = miso)、combine関数でデータストアをひとまとめにしてからtrainnetworkに入力します。このとき、ラベルも一緒にcombineしてあげる必要があるのですが、ラベルだけを管理するdatastoreは現状無いため、ここだけカスタムで作成する必要があります。正式なサポートプロダクトではありませんが、カテゴリカルデータを扱えるカスタムのdatastoreを添付しますので、お使いください。 以上を踏まえてコードの大まかな流れは以下のようになります。 % 画像のデータストアは準備しておく。imds1, imds2とする % ラベルのデータストアを作成(ラベルはカテゴリカル型のベクトルとして作成しておく。categoricalvectorとする。 labelds = categoricaldatastore(categoricalvector); % 添付のプログラムを使う % combineで画像1、画像2、ラベルのデータストアをひとまとめにする combds = combine(imds1, imds2, labelds); % 学習(ネットワークとオプションはすでにできているとして) net = trainnetwork(combds, lgraph, options); ネットワークにおける入力層の順番は、作成したレイヤーグラフのinputnamesというフィールドでわかります。この順番と、combineした順が対応しますので、combineで入力した一番目のimds1はinputnames(1)に、2番目のimds2はinputnames(2)の入力層に投入されます。今回はどちらでもいいかもしれませんが...。 augmentationなどが必要な場合は、transform関数でtransformeddatastoreを作って、それをcombineするのがいいです。 作成していてまたわからないことがありましたら質問してください。 下記は参考まで combineddatastore: https://www.mathworks.com/help/matlab/ref/matlab.io.datastore.combineddatastore.html trainnetworkでのcombineddatastoreの関連記述: https://www.mathworks.com/help/deeplearning/ref/trainnetwork.html?s_tid=doc_ta#mw_6a0ead40-d0f3-4af8-be23-37b407b8e923