00:00
加载中……请稍等……

注意,报告格式本人一概不知,如有不妥之处,请在评论区留言,我会进行修正,此篇文章纯粹的就是为了记录学习过程!!!

二分类问题。即“正负分类”可能是应用最广泛的一类机器学习问题。在这个例子中,我们

将学习根据评论的文字内容将电影评论分为“正面”评论和“负面”评论。

关于IMDB数据集

请参考:

[link]
[item name="csdn" link="https://blog.csdn.net/qq_23869697/article/details/86505343" desc="比较详细的介绍" /]
[/link]

[goal title="说明"]
[item check="true"] keras[/item]
[item check="false"] GPU [/item]
[item progress="60%"] 文章状态[/item]
[/goal]

[timeline title="项目时间线" type="small" start="人生苦短" end="我用python"]
[item] 安装anaconda [/item]

[item] 安装keras,tensorflow等[/item]

[item] 下载imdb数据集[/item]

[item] 构建网络[/item]

[item] 代入网络学习[/item]

[/timeline]

第一步:导入keras,准备数据

import keras
keras.__version__
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
#进一步转换为二进制矩阵

import numpy as np

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1. 
#上面把result的索引设为1
    return results
#下面,向量化数据
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
#向量化标签数据
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')

第二步:构建网络

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

#配置优化器
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
from keras import optimizers

model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss='binary_crossentropy',
              metrics=['accuracy'])
#自定义损失和指标
from keras import losses
from keras import metrics

model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss=losses.binary_crossentropy,
              metrics=[metrics.binary_accuracy])

为什么用sigmoid作为激活函数?

sigmoid函数值域为0,1且程一条光滑的曲线(非线性函数)

为什么用二元交叉熵作为loss函数?

因为结果是只有两个分布,即正负,这个函数将样本数据学习的结果与样本数据的答案匹配起来进行计算损失值。

开始fit模型

history = model.fit(partial_x_train,
                    partial_y_train,
                    epochs=20,
                    batch_size=512,
                    validation_data=(x_val, y_val))

THE END

通过本次的学习,我们知道了二分类问题的神经网络可以不用那么复杂,最后的激活函数用sigmoid,损失函数用二元交叉熵。

难点:我们还没有那么大的精力来收集数据,处理数据,对于这次神经网络学习来说,收集数据是我最不想碰到的问题了。

样本少,时间长,没有时间去收集。

从论坛上大家一起收集,或者由组织来进行收集的数据也是有限的,目前得知,一种常见问题几乎只有一种典例,这是人工智能大众化的一道门槛。

他所需要的数学理论,对于高一来说,都可以理解,当然,你问他二元交叉熵怎么地怎么地,他也不知道,他只知道这是一个计算的函数方法。仅此而已,目前对于你我来说(我相信你不是专业的)只需要对其产生一个直觉性的理解就可以了!

Last modification:February 23rd, 2021 at 04:12 pm
如果觉得我的文章对你有用,请随意赞赏