为什么在简单的 2 输出 2 输入网络中,我在 Keras 中得到 6 个参数?

我正在学习 keras 中的神经网络。我在合成数据上指定了一个简单的模型。


model=tf.keras.models.Sequential()

model.add(tf.keras.layers.Dense(2, input_dim=2))

model.compile(optimizer='sgd', loss='mean_squared_error')

我有两个属性来预测两个值。


这是我初始化数据的地方:


x=[]

y=[]

for x1 in range (6):

    x2=int(random.random()*10)

    x.append([x1,x2])

    y.append([2*x1+x2**2-2, x1*x2])

xs = np.array(x, dtype=float)

xs=xs.reshape(6,2)

ys = np.array(y, dtype=float)

ys=ys.reshape(6,2)

model.fit(xs, ys, epochs=500)

请注意,我仅将这些数据用于学习目的。在我尝试观察模型之后。我跑model.summary()和model.get_weights()。


Model: "sequential"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense (Dense)                (None, 2)                 6         

=================================================================

Total params: 6

Trainable params: 6

Non-trainable params: 0

_________________________________________________________________

None

model weights  [array([[0.5137405, 5.477211 ],

       [8.750836 , 1.6910588]], dtype=float32), array([-5.701193, -7.874653], dtype=float32)]

我不明白为什么有 6 个参数和 6 个权重。根据我的理解,每个输入应该有两个,或者我应该在某个地方专门定义输出层?


素胚勾勒不出你
浏览 89回答 2
2回答

慕尼黑8549860

您定义的模型架构如下图所示你有一个包含两个神经元的致密层。为什么是两个神经元?因为第一个参数Dense是units表示神经元的数量。每个神经元对 进行线性运算X.W + b,然后对其应用激活函数。神经元中的可学习参数是W和b。由于的大小X为 2(2 个特征),因此大小为W(=2) + b= 3。因此在这种情况下,每个神经元将具有 3 个参数,而 2 个这样的神经元将具有 6 个参数。

拉丁的传说

您有一个包含两个神经元的输出层,这些神经元中的每一个都必须有两个权重(因为输入是 2 维的)和另一个称为“偏差”的权重。所以每个神经元有 3 个权重。总之,您有 2 个神经元,每个神经元有 3 个权重或可训练参数,因此您的网络中总共有 6 个可训练参数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python