Loading... <div class='handsome_aplayer player-content' data-preload="auto" data-autoplay="false" data-listMaxHeight="340px" data-order="list"> <div class="handsomePlayer-tip-loading"><span></span> <span></span> <span></span> <span></span><span></span></div><div class="handsome_aplayer_music" data-id="453189278" data-server="netease" data-type="song" data-auth="73baebe28f75bf6e5dd08caf707eb78d"></div> </div> 注意,报告格式本人一概不知,如有不妥之处,请在评论区留言,我会进行修正,此篇文章纯粹的就是为了记录学习过程!!! 二分类问题。即“正负分类”可能是应用最广泛的一类机器学习问题。在这个例子中,我们 将学习根据评论的文字内容将电影评论分为“正面”评论和“负面”评论。 关于IMDB数据集 请参考: <div class="list-group list-group-lg list-group-sp row" style="margin: 0"><div class="col-sm-6"> <a href="https://blog.csdn.net/qq_23869697/article/details/86505343" target="_blank" class="no-external-link no-underline-link list-group-item no-borders box-shadow-wrap-lg"> <span class="pull-left thumb-sm avatar m-r"> <img noGallery src="https://blog.a152.top/usr/plugins/Handsome/assets/image/nopic.jpg" alt="Error" class="img-square"></span> <span class="clear"><span class="text-ellipsis"> csdn</span> <small class="text-muted clear text-ellipsis">比较详细的介绍</small> </span> </a> </div></div> <div class="panel panel-default box-shadow-wrap-lg goal-panel"> <div class="panel-heading"> 说明 </div> <div class="list-group"> <div class="list-group-item"><div class="checkbox"> <label class="i-checks"> <input type="checkbox" checked="" disabled="" value=""> <i></i> keras </label> </div><div class="checkbox"> <label class="i-checks"> <input type="checkbox" disabled="" value=""> <i></i> GPU </label> </div> <p class="goal_name"> 文章状态:</p> <div class="progress-striped active m-b-sm progress" value="dynamic" type="danger"> <div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="97" aria-valuemin="0" aria-valuemax="100" style="width: 59%;"><span> 59% </span></div> </div></div></div></div> <div class="panel panel-default box-shadow-wrap-lg goal-panel"> <div class="panel-heading"> 项目时间线 </div> <div class="padder-md wrapper"> <ul class="timeline"><li class="tl-header"> <div class="btn btn-sm btn- btn-rounded m-t-none">人生苦短</div> </li> <li class="tl-header"> <div class="btn btn-sm btn-default btn-rounded m-t-none">安装anaconda</div> </li><li class="tl-header"> <div class="btn btn-sm btn-default btn-rounded m-t-none">安装keras,tensorflow等</div> </li><li class="tl-header"> <div class="btn btn-sm btn-default btn-rounded m-t-none">下载imdb数据集</div> </li><li class="tl-header"> <div class="btn btn-sm btn-default btn-rounded m-t-none">构建网络</div> </li><li class="tl-header"> <div class="btn btn-sm btn-default btn-rounded m-t-none">代入网络学习</div> </li><li class="tl-header"> <div class="btn btn-sm btn-default btn-rounded m-t-none">我用python</div> </li></ul></div></div> ## 第一步:导入keras,准备数据 ```python 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') ``` --- ## 第二步:构建网络 ```python 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模型 ```python 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:March 5, 2021 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的内容对你有用,请随意赞赏