質問編集履歴

5

質問内容に補足説明を記載しました.

2019/05/08 07:18

投稿

rk2
rk2

スコア11

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

質問内容に補足説明を記載しました.

2019/05/08 07:18

投稿

rk2
rk2

スコア11

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

質問内容に補足説明を記載しました.

2019/05/08 07:10

投稿

rk2
rk2

スコア11

test CHANGED
File without changes
test CHANGED
File without changes

2

質問内容に補足説明を記載しました.

2019/05/08 01:58

投稿

rk2
rk2

スコア11

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.dtype)
239
+ print("y", y_out.shape, "t", t.shape)
236
240
 
237
241
 
238
242
 

1

編集前のエラーは解決しましたが新しくエラーが出たのでエラー内容とコードの修正をしました

2019/05/08 01:54

投稿

rk2
rk2

スコア11

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.dtype.kind == i
37
+ Expect: t.ndim == x.ndim - 1
38
-
38
+
39
- Actual: f != i
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