keras model.get_weight 未返回预期尺寸的结果
keras model.get_weight is not returning results in expected dimensions
我正在使用 keras 对 mnist 数据集进行分类。我有兴趣对训练后生成的权重矩阵进行一些操作,但有些层权重矩阵看起来没有完全连接。
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)
为什么第二个有 (1000,) 而不是 (1000,1000)?
因为这是偏见。不要忘记该层由 (sometimes also written as ) 定义。
假设x
的形状是(None, 784)
,权重w
的形状是(784, 1000)
。 matmul(x, w)
操作的结果是形状 (None, 1000)
。对于此形状的结果张量,您要添加形状 (1000, )
的偏差,该偏差沿 None
维度传播。
我正在使用 keras 对 mnist 数据集进行分类。我有兴趣对训练后生成的权重矩阵进行一些操作,但有些层权重矩阵看起来没有完全连接。
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)
为什么第二个有 (1000,) 而不是 (1000,1000)?
因为这是偏见。不要忘记该层由
假设x
的形状是(None, 784)
,权重w
的形状是(784, 1000)
。 matmul(x, w)
操作的结果是形状 (None, 1000)
。对于此形状的结果张量,您要添加形状 (1000, )
的偏差,该偏差沿 None
维度传播。