質問編集履歴
5
質問内容に補足説明を記載しました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
セグメンテーションはここ([リンク内容](https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/Image_Segmentation.html))を参考にしてコードを書きました.
|
8
8
|
|
9
|
-
今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類(物体A,物体B,その他)を試みています.入力画像と正解画像はそれぞれアルファチャンネル無しの3チャンネル画像です.
|
9
|
+
今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類(物体A,物体B,その他)を試みています.入力画像と正解画像はそれぞれアルファチャンネル無しの3チャンネル画像ですが,正解画像はインデックスカラー画像になっており,プログラムで読み込んだ際はshapeが(1, 512, 512)でした.
|
10
10
|
|
11
11
|
chainerは初めて扱うので解決策が分からず困っています.
|
12
12
|
|
4
質問内容に補足説明を記載しました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,12 +40,12 @@
|
|
40
40
|
|
41
41
|
```
|
42
42
|
|
43
|
-
SoftmaxCrossEntropyに代入する変数の次元が異なるということだと思うのですが,どこに四次元のものが出てきているのかわからないでいます.
|
44
|
-
|
45
43
|
確認の為SoftmaxCrossEntropyの変数であるy_outとtの型を.shapeで確認したのですが,
|
46
44
|
|
47
45
|
y_out=(バッチ数, 3, 512, 512) t=(バッチ数, 1, 512, 512)となっていました.
|
48
46
|
|
47
|
+
tが3次元の入力を求めているようですが,4次元のどの次元を削除(?)して3次元に変換する必要があるのでしょうか?
|
48
|
+
|
49
49
|
### 該当のソースコード
|
50
50
|
|
51
51
|
|
3
質問内容に補足説明を記載しました.
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
2
質問内容に補足説明を記載しました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,7 +40,11 @@
|
|
40
40
|
|
41
41
|
```
|
42
42
|
|
43
|
-
|
43
|
+
SoftmaxCrossEntropyに代入する変数の次元が異なるということだと思うのですが,どこに四次元のものが出てきているのかわからないでいます.
|
44
|
+
|
45
|
+
確認の為SoftmaxCrossEntropyの変数であるy_outとtの型を.shapeで確認したのですが,
|
46
|
+
|
47
|
+
y_out=(バッチ数, 3, 512, 512) t=(バッチ数, 1, 512, 512)となっていました.
|
44
48
|
|
45
49
|
### 該当のソースコード
|
46
50
|
|
@@ -80,8 +84,6 @@
|
|
80
84
|
|
81
85
|
"""ラベルデータの値を整数値に変換"""
|
82
86
|
|
83
|
-
data = data[:3, ...]
|
84
|
-
|
85
87
|
data = data.astype(np.int32)
|
86
88
|
|
87
89
|
return data
|
@@ -232,7 +234,9 @@
|
|
232
234
|
|
233
235
|
y_out = self.predictor(inputimg)
|
234
236
|
|
237
|
+
#ここで型を確認したが四次元のものはなかった.
|
238
|
+
|
235
|
-
print(y_out.
|
239
|
+
print("y", y_out.shape, "t", t.shape)
|
236
240
|
|
237
241
|
|
238
242
|
|
1
編集前のエラーは解決しましたが新しくエラーが出たのでエラー内容とコードの修正をしました
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
セグメンテーションはここ([リンク内容](https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/Image_Segmentation.html))を参考にしてコードを書きました.
|
8
8
|
|
9
|
-
今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類を試みています.
|
9
|
+
今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類(物体A,物体B,その他)を試みています.入力画像と正解画像はそれぞれアルファチャンネル無しの3チャンネル画像です.
|
10
10
|
|
11
11
|
chainerは初めて扱うので解決策が分からず困っています.
|
12
12
|
|
@@ -34,9 +34,9 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
Expect: t.d
|
37
|
+
Expect: t.ndim == x.ndim - 1
|
38
|
-
|
38
|
+
|
39
|
-
Actual:
|
39
|
+
Actual: 4 != 3
|
40
40
|
|
41
41
|
```
|
42
42
|
|
@@ -52,16 +52,12 @@
|
|
52
52
|
|
53
53
|
import chainer
|
54
54
|
|
55
|
-
|
56
|
-
|
57
55
|
import numpy as np
|
58
56
|
|
59
57
|
import chainer.functions as F
|
60
58
|
|
61
59
|
import chainer.links as L
|
62
60
|
|
63
|
-
|
64
|
-
|
65
61
|
from chainer import datasets
|
66
62
|
|
67
63
|
from chainer import reporter
|
@@ -80,6 +76,18 @@
|
|
80
76
|
|
81
77
|
|
82
78
|
|
79
|
+
def transform(data):
|
80
|
+
|
81
|
+
"""ラベルデータの値を整数値に変換"""
|
82
|
+
|
83
|
+
data = data[:3, ...]
|
84
|
+
|
85
|
+
data = data.astype(np.int32)
|
86
|
+
|
87
|
+
return data
|
88
|
+
|
89
|
+
|
90
|
+
|
83
91
|
def create_dataset(img_filenames, label_filenames):
|
84
92
|
|
85
93
|
"""データセット作成関数"""
|
@@ -88,6 +96,8 @@
|
|
88
96
|
|
89
97
|
label = datasets.ImageDataset(label_filenames)
|
90
98
|
|
99
|
+
label = datasets.TransformDataset(label, transform)
|
100
|
+
|
91
101
|
dataset = datasets.TupleDataset(img, label)
|
92
102
|
|
93
103
|
return dataset
|
@@ -106,22 +116,12 @@
|
|
106
116
|
|
107
117
|
r"C:\Users\ttbnb\Documents\Python Scripts\data\label*.png"))
|
108
118
|
|
109
|
-
#タプルで入力画像とマスクの正解画像を束ねる
|
110
|
-
|
111
119
|
train_val = create_dataset(train_img_filenames, train_label_filenames)
|
112
120
|
|
113
|
-
#データセットのデータ数を取得する
|
114
|
-
|
115
121
|
number = len(train_val)
|
116
122
|
|
117
|
-
#データセットをトレーニング用と検証用に分割する割合を決める
|
118
|
-
|
119
123
|
ratio = 0.9
|
120
124
|
|
121
|
-
#読み込んだデータセットをトレーニング用とヴァリデーション用に分割する
|
122
|
-
|
123
|
-
#第二引数の数だけトレーニングに,残りをヴァリデーションに,seed=0で分割を固定化
|
124
|
-
|
125
125
|
train, valid = split_dataset_random(train_val, int(number*ratio), seed=0)
|
126
126
|
|
127
127
|
return train, valid
|