Я делал модель нейронной сети, используя некоторые данные IMDB. Я создал пакет слов и разделил данные на train_data и test_data. X_train - это данные для обучения модели, а T_train - метка для них. Я скопировал и вставил определения функций из книги, которую я изучаю, и определил сетевую модель.
# coding: utf-8
import sys, os
sys.path.append(os.pardir)
X_train = np.array([np.array(xi) for xi in x_train])
T_train = np.array([np.array(ti) for ti in t_train])
network = TwoLayerNet(input_size=max_length, hidden_size=100 , output_size=2)
iters_num = 10000
train_size = X_train.shape[0]
batch_size = 100
learning_rate = 0.1
train_loss_list = []
train_acc_list = []
test_acc_list = []
iter_per_epoch = max(train_size / batch_size, 1)
for i in range(iters_num):
batch_mask = np.random.choice(train_size, batch_size)
x_batch = X_train[batch_mask]
t_batch = T_train[batch_mask]
#grad = network.numerical_gradient(x_batch, t_batch)
grad = network.gradient(x_batch, t_batch)
for key in ('W1', 'b1', 'W2', 'b2'):
network.params[key] -= learning_rate * grad[key]
loss = network.loss(x_batch, t_batch)
train_loss_list.append(loss)
if i % iter_per_epoch == 0:
train_acc = network.accuracy(X_train, T_train)
test_acc = network.accuracy(x_test, t_test)
train_acc_list.append(train_acc)
test_acc_list.append(test_acc)
print(train_acc, test_acc)
И я получаю следующую ошибку:
ValueError Traceback (most recent call last)
<ipython-input-25-cce2ada4f4f7> in <module>
37
38 #grad = network.numerical_gradient(x_batch, t_batch)
---> 39 grad = network.gradient(x_batch, t_batch)
40
41
<ipython-input-14-52e9d162e44b> in gradient(self, x, t)
53 def gradient(self, x, t):
54 # forward
---> 55 self.loss(x, t)
56
57 # backward
<ipython-input-14-52e9d162e44b> in loss(self, x, t)
28 def loss(self, x, t):
29 y = self.predict(x)
---> 30 return self.lastLayer.forward(y, t)
31
32
<ipython-input-14-52e9d162e44b> in forward(self, x, t)
146 self.t = t
147 self.y = softmax(x)
--> 148 self.loss = cross_entropy_error(self.y, self.t)
149
150 return self.loss
<ipython-input-14-52e9d162e44b> in cross_entropy_error(y, t)
172
173 batch_size = y.shape[0]
--> 174 return -np.sum(t * np.log(y + 1e-7)) / batch_size
175 #return -np.sum(np.dot(np.log(y + 1e-7), t)) / batch_size
176 #return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_size
ValueError: operands could not be broadcast together with shapes (100,2) (100,100)
Я даже не уверен, откуда взялась форма (100, 100). Рад, что кто-то помощь.