当前位置: 首页 > 知识库问答 >
问题:

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

斜成济
2023-03-14

我正在学习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个重量。根据我的理解,每个输入应该有两个输出层,或者我应该在某个地方专门定义输出层?

共有2个答案

白哲茂
2023-03-14

你有一个带有两个神经元的输出层,每个神经元必须有两个权重(因为输入是2维的)和另一个称为“偏差”的权重。所以每个神经元有3个权重。

总之,您有2个神经元,每个神经元有3个权重或可训练参数,因此网络中总共有6个可训练参数。

汪晨
2023-03-14

您定义的模型架构如下图所示

你有一个由两个神经元组成的致密层。为什么是两个神经元?因为密集的第一个参数是单位,它表示神经元的数量。每个神经元对X.W b进行线性运算,然后对其应用激活函数。nuerons中的可学习参数是W和b。

由于X的大小是2(2个特征),所以W的大小是(=2)b的大小是3。因此,在这种情况下,每个神经元将有3个参数,2个这样的神经元将有6个参数。

 类似资料:
  • 根据keras文件(https://keras.io/layers/convolutional/)Conv1D输出张量的形状为(batch\u size,new\u steps,filters),而输入张量的形状为(batch\u size,steps,input\u dim)。我不明白这是怎么回事,因为这意味着如果你传递一个长度为8000的1d输入,其中batch\u size=1,steps=

  • 真的很难理解keras中卷积1d层的输入维度: 输入形状 带形状的三维张量:(采样、步长、input\u dim)。 输出形状 带形状的三维张量:(采样、新的\u步骤、nb\u过滤器)。由于填充,步骤值可能已更改。 我希望我的网络接受价格的时间序列(101,按顺序)并输出4个概率。我当前的非卷积网络做得相当好(训练集为28000)如下所示: 为了改进这一点,我想从具有长度为10的局部感受野的输入层

  • 问题是 有一个输入字符串集合和一个查询字符串集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。 字符串=[ab,ab,abc]查询=[ab,abc,bc]有ab的实例2,'abc'的实例1和'bc'的实例0。对于每个查询,添加一个元素。 现在我尝试使用链表实现它,但不是以2,1,0的形式获得输出。我得到的输出是2,1,0,2,2,1,0,2。我不知道是如何为超过3个链接创建LL的。请帮

  • 有人可以帮我理解吗 此语句是否正确:这意味着bcdc是Baseclass类类型,其值是Dervedclass对象类型?此外,这是什么意思,为什么一个对象会这样实例化,而不是让类类型与正在实例化的新对象相同,如? 为什么

  • 我正试图从我的角形中得到一些信息。我想在打字时看到输入。我得到这个错误: 这是我的表单html模板。我将ngModel放在表单输入中,我试图通过{{model.name}}绑定键入并查看我的输入。: 这是我的表单组件: 这是我app.module.ts的一部分,我在其中导入了Forms模块: 另外,如果你想查看所有代码,这里是 github 存储库。

  • 问题内容: 给定一个预测变量向量时,我有一个问题要处理两个输出。假设预测变量矢量看起来像,它是坐标,并且是附加到出现坐标的其他属性。基于这个预测变量集,我想进行预测。这是一个时间序列问题,我正在尝试使用多元回归解决。我的问题是如何设置keras,这可以在最后一层为我提供2个输出。 问题答案: