keras model.get_weight не возвращает результаты в ожидаемых измерениях - PullRequest
2 голосов
/ 07 апреля 2019

Я делаю классификацию по наборам данных mnist с использованием keras.Я заинтересован в выполнении какой-либо операции над матрицей веса, сгенерированной после тренировки, но некоторые весовые матрицы слоев выглядят так, как будто они не полностью связаны.

model = Sequential()
model.add(Dense(1000, input_shape = (train_x.shape[1],), activation='relu' ))
model.add(Dense(1000, activation='relu'))
model.add(Dense(500, activation='relu'))
model.add(Dense(200, activation='relu'))
model.add(Dense(10, activation='softmax'))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics = ['accuracy'])
model.fit(train_x,train_y, epochs=10, validation_data= (test_x,test_y))

w = model.get_weights()

for i in range(5):
        print(w[i].shape)

сейчас, когда я печатаю размеры весовой матрицы каждого слояЯ получаю следующий результат

(784, 1000)
(1000,)
(1000, 1000)
(1000,)
(1000, 500)

почему 2-й имеет (1000,), а не (1000,1000)?

1 Ответ

3 голосов
/ 07 апреля 2019

Потому что это предвзятость.Не забывайте, что слой определяется как enter image description here (иногда также записывается как enter image description here).

Предположим, что форма x равна (None, 784), а форма весов w равна (784, 1000).Операция matmul(x, w) приводит к форме (None, 1000).К полученному тензору этой формы вы добавляете смещение формы (1000, ), которое транслируется по измерению None.

...