回答編集履歴

1

edit

2017/12/10 10:57

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -1,7 +1,121 @@
1
+ 修正:このコメントは正しくありません。
2
+
1
- ytrain.shape = (2, 1)
3
+ __(ytrain.shape = (2, 1)
2
4
 
3
5
 
4
6
 
5
7
  l2 = L.Linear(100,2)
6
8
 
7
- が相容れないせいではないでしょうか。
9
+ が相容れないせいではないでしょうか。)__
10
+
11
+
12
+
13
+ 追記:
14
+
15
+ SoftmaxCrossEntropyはnp.int32を教師データに要求します。
16
+
17
+ tに代入される部分を.astype('i')に変換しておく必要があります。
18
+
19
+ https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html
20
+
21
+ 例を見ると型の変換がありました。
22
+
23
+
24
+
25
+ ---
26
+
27
+
28
+
29
+ ```python
30
+
31
+ import numpy as np
32
+
33
+
34
+
35
+ from chainer import Link, Chain, ChainList
36
+
37
+ import chainer.functions as F
38
+
39
+ import chainer.links as L
40
+
41
+ from chainer import optimizers, datasets, iterators, training
42
+
43
+ from chainer.training import extensions
44
+
45
+
46
+
47
+ class MyChain(Chain):
48
+
49
+ def __init__(self):
50
+
51
+ super(MyChain, self).__init__(
52
+
53
+ cn1=L.Convolution2D(3, 8, (2, 3), stride=1, pad=1),
54
+
55
+ cn2=L.Convolution2D(8, 16, (2, 3), stride=1, pad=1),
56
+
57
+ l1=L.Linear(160, 100),
58
+
59
+ l2=L.Linear(100 ,2)
60
+
61
+ )
62
+
63
+
64
+
65
+ def __call__(self, x, t):
66
+
67
+ pt = self.fwd(x)
68
+
69
+ return F.softmax_cross_entropy(pt, t)
70
+
71
+
72
+
73
+ def fwd(self, x):
74
+
75
+ h1 = F.max_pooling_2d(F.relu(self.cn1(x)), 2) #8*3*10
76
+
77
+ h2 = F.max_pooling_2d(F.relu(self.cn2(h1)), 2) #16*2*5
78
+
79
+ h3 = F.dropout(F.relu(self.l1(h2)))
80
+
81
+ h4 = self.l2(h3)
82
+
83
+ return h4
84
+
85
+
86
+
87
+ xtrain = np.random.random((2, 3, 5, 20)).astype('f')
88
+
89
+ ytrain = np.random.randint(2, size=(2, 1))
90
+
91
+ ytrain = np.hstack((ytrain, 1-ytrain))
92
+
93
+ ytrain = np.argmax(ytrain, axis=1).astype('i')
94
+
95
+
96
+
97
+ model = MyChain()
98
+
99
+ optimizer = optimizers.Adam()
100
+
101
+ optimizer.setup(model)
102
+
103
+
104
+
105
+ train = datasets.tuple_dataset.TupleDataset(xtrain, ytrain)
106
+
107
+
108
+
109
+ iterator = iterators.SerialIterator(train, 2)
110
+
111
+ updater = training.StandardUpdater(iterator, optimizer)
112
+
113
+ trainer = training.Trainer(updater, (1000, 'epoch'))
114
+
115
+
116
+
117
+ trainer.extend(extensions.ProgressBar())
118
+
119
+ trainer.run()
120
+
121
+ ```