我是新手,有几个问题。我有一些用Python和Keras创建的神经网络代码片段。该模型用于情感分析。使用了标记数据的训练数据集(情感=1或0)。现在我有几个关于如何描述这个神经网络的问题。
model = Sequential() model.add(Dense(512, input_shape=(max_words,), activation='relu')) model.add(Dropout(0.5)) model.add(Dense(256, activation='sigmoid')) model.add(Dropout(0.5)) model.add(Dense(2, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(train_x, train_y, batch_size=32, epochs=5, verbose=1, validation_split=0.1, shuffle=True)
我对以下许多术语不是很清楚,请不要对我太苛刻。
- 1: 有什么使这个模型成为典型的情感分析模型吗?
- 2: 它是“词袋模型”吗?(我的猜测是肯定的,因为数据是使用分词器预处理的)
- 3: 它是“卷积的”吗?
- 4: 它是深的吗?
- 5: 它是密集的 – 它有多密集?
- 6: 密度的原因是什么?-数字:512, 256, 2
- 7: 它有多少层(包括/不包括输入和输出层)?
- 8: 它是监督的/非监督的?
- 9: 在使用的顺序中,三种不同的激活函数’relu’, ‘sigmoid’, ‘softmax’背后的原因是什么?
感谢任何帮助!
回答:
分类交叉熵
,这是该神经网络的损失函数,使其可用于情感分析。交叉熵损失返回不同类别的概率。在你的案例中,你需要两个可能类别的概率(0
或1
)。- 我不确定你是否在使用分词器,因为从你提供的代码中看不出来,但如果你在使用,那么是的,它是一个词袋模型。词袋模型本质上是为你文本中的词根创建一个存储。从维基百科看,如果以下是你的文本:
John喜欢看电影。Mary也喜欢电影。
那么,这个文本的词袋模型将是:
{“John”:1,”喜欢”:2,”看”:1,”电影”:2,”Mary”:1,”也”:1};
- 你使用的网络架构不是卷积的,而是一个前馈模型,它将一层中的所有单元连接到下一层的所有单元,提供两层值的点积。
- 没有一个被普遍接受的定义来判断一个网络是否是深的。但是,作为一个经验法则,如果一个网络有超过2个中间层(不包括输入和输出层),那么它可以被认为是深的网络。
- 在上面提供的代码中,
Dense
反映了第一层中的所有单元(512)都连接到下一层中的每个其他单元,即第一层和第二层之间总共有512×256个连接。 - 是的,第一层中的512个单元与第二层中的256个单元之间的连接,形成了一个512×256维的参数矩阵,使其成为密集的。但在这里使用
Dense
更多的是从API的角度而不是语义的角度。同样,第二层和第三层之间的参数矩阵将是256×2维的。 - 如果你排除输入层(有512个单元)和输出层(有2个可能的输出,即0/1),那么你的网络在这里有一层,包含256个单元。
- 这个模型是监督的,因为情感分析任务与每个输入数据点相关联的输出(正面或负面)。你可以将这个输出视为网络的监督者,指示数据点的情感是正面还是负面。非监督任务与数据点没有相关联的输出信号。
- 这里使用的激活函数的目的是为网络的计算提供非线性。更详细地说,
sigmoid
有一个很好的特性,它的输出可以被解释为概率。所以如果网络对一个数据点输出0.89,那么这意味着模型评估该数据点为正面的概率是0.89。使用sigmoid可能是为了教学目的,因为ReLU激活单元比sigmoid/tanh更受青睐,因为其更好的收敛特性,我没有看到使用sigmoid而不是ReLU的令人信服的理由。