吃维生素b2有什么好处和副作用| 月抛是什么意思| 口腔扁平苔藓吃什么药| 世界上最长的河流是什么| 6月23日是什么星座| 小孩有积食吃什么调理| 铜罗是什么生肖| 土乞念什么| 为什么分泌物是褐色的| 淮山跟山药有什么区别| au585是什么金| hpm是什么意思| 母亲节送妈妈什么礼物好| 曹操属什么| 讲义是什么| 图灵测试是什么| 全运会是什么| 外阴裂口什么原因| 解脲脲原体是什么意思| 吃什么治便秘| 野蛮生长是什么意思| 什么是自我| 50岁是什么之年| 桃子吃了有什么好处| 为什么医生爱开喜炎平| 布加综合征是什么病| 弱水是什么意思| 忤是什么意思| 减肥吃什么药| 6合是什么生肖| 低血压不能吃什么食物| 腹痛拉稀什么原因| 71年的猪是什么命| 羊脑炎什么症状怎么治| sigma是什么牌子| 销魂是什么意思| diy是什么| 什么人不能吃狗肉| 什么鞋穿着舒服| 老虎头衣服是什么牌子| dfs是什么| nlp是什么意思| 无情是什么意思| 什么药溶血栓最好| 牙齿痛用什么药| 骨肉相连是什么肉| 夜卧早起是什么意思| 包饺子剩下的面团能做什么| 爸爸的表哥叫什么| 耳朵外面痒是什么原因| 医保统筹支付什么意思| 卵巢检查做什么项目| 温州人为什么会做生意| 尿路感染吃什么中药| 为什么会得骨癌| 12月17号什么星座| 戴黄金对身体有什么好处| 手麻是什么原因| 蓝牙耳机什么样的好| 荷叶泡水喝有什么作用| 白带发黄是什么妇科病| 小白脸什么意思| 脚拇指发麻是什么原因| 右眼睛跳是什么原因| 介意是什么意思| 网调是什么意思| 狗狗的鼻子为什么是湿的| 白虎是什么意思| 24度穿什么衣服合适| 1月底是什么星座| 氨酚咖那敏片是什么药| 秋老虎是什么意思| 狗狗流眼泪是什么原因| 甘草配什么泡水喝最好| 钠低会出现什么症状| s1隐裂是什么意思| 脚浮肿吃什么药| 味精是什么做的| 包皮手术是什么| 精索静脉曲张是什么| 1999年属什么生肖| 生理期腰疼是什么原因| 月经黑色是什么原因| 辐射对称是什么意思| 如字五行属什么| 上面一个处下面一个日是什么字| 月子餐吃什么| 九月份是什么星座| 妲己是什么意思| 照字五行属什么| 患难见真情的上一句是什么| 藿香正气水有什么功效| 肝郁气滞吃什么药好| 扁桃体发炎吃什么好得快| 体内火气大吃什么降火| 感康是什么药| 红牛什么时候喝效果好| 街道办事处属于什么单位| 晏殊字什么| 无聊的反义词是什么| 8月25号是什么日子| 什么原因引起静脉曲张| 物以类聚形容什么动物| pw是什么| 小孩睡觉出汗多是什么原因| 腋窝下疼痛是什么原因| 着床成功后有什么症状或感觉| 下午三点到四点是什么时辰| 微量元素6项是查什么| 例假血是黑色的是什么原因| 什么鱼不会游泳| mcu是什么| 晒伤用什么药| 史诗级什么意思| 巧克力囊肿是什么意思| 皮蛋吃了有什么好处和坏处| 生的反义词是什么| 鼻塞打喷嚏是什么原因| 苦瓜有什么好处| 为什么趴着睡觉会胀气然后打嗝| 缩量横盘意味着什么| 首脑是什么意思| 鱼肚是什么| 什么叫中位数| 肺部斑片状高密度影是什么意思| 闭角型青光眼是什么意思| 6.25是什么日子| 六月十四号是什么星座| 什么是肾虚| 乖戾是什么意思| 鸡头米是什么东西| 錾是什么意思| 广藿香是什么味道| 贞操是什么意思| 什么牌子的助听器最好| 什么茶减肥| 有点咳嗽吃什么药| 阿玛尼属于什么档次| twins什么意思| 姓黑的都是什么族| 智齿吃什么消炎药| 95511是什么号码| 骨皮质断裂是什么意思| 医保自费是什么意思| 吃什么水果去火| 制冰机不制冰是什么原因| 凝血六项是检查什么的| 书房字画写什么内容好| 93属什么生肖| 大小脸是什么原因造成的| 脚为什么脱皮| peaches是什么意思| 生气吃什么药可以顺气| 11月11号什么星座| 膝盖咔咔响是什么原因| 惊天动地是什么生肖| 吃什么可以让月经快点来| 免疫球蛋白e高说明什么| 排骨煮什么好吃| 618是什么| 拉屎为什么是绿色的| 拉肚子呕吐吃什么药| other是什么意思| 出其不意下一句是什么| h1v是什么意思| 眉头下方有痣代表什么| 同房出血是什么原因造成的| 淋巴细胞偏高是什么意思| 头晕头疼挂什么科| 孕妇喝纯牛奶对胎儿有什么好处| 粉红粉红的什么填空| 甲泼尼龙主要治什么| 治疗腱鞘炎用什么药效果好| 调侃是什么意思| 腕管综合征吃什么药| 智障什么意思| 白带褐色什么原因| 头孢是什么药| 母鸡是什么意思| 金脸银脸代表什么人物| 为什么耳屎是湿的| 胆红素偏高是什么意思| 什么叫肾病综合征| 结膜炎角膜炎用什么眼药水| 腰间盘突出用什么药| 安全感是什么意思| 原生态是什么意思| 重度贫血是什么原因引起的| 健康管理是干什么的| 空调睡眠模式是什么意思| 吊是什么意思| 咳嗽有绿痰是什么原因| 痛风吃什么药好得快| 离婚需要带什么证件| 夜半是什么时辰| 宝宝屁多是什么原因| 弊是什么意思| mw是什么单位| 乔字五行属什么| 羲字五行属什么| 兔子的天敌是什么动物| 男扮女装叫什么| ko是什么意思啊| 执业药师什么时候报名| 孕妇查凝血是检查什么| 嗜睡是什么病| 木灵念什么| 梦见别人给钱是什么意思| 很黄很暴力是什么意思| 掉头发缺什么| 集锦是什么意思| 车抛锚是什么意思| 眼泪多是什么原因| 大战三百回合是什么意思| mic什么意思| 红皮鸡蛋和白皮鸡蛋有什么区别| 拔罐挂什么科| 什么奶粉跟母乳一个味| 除氯是什么意思| 军国主义是什么意思| 血液透析是什么意思| 农历五月二十四是什么星座| 渡人是什么意思| 百香果是什么季节的水果| 桑叶长什么样子图片| 初秋的天冰冷的夜是什么歌| 医院属于什么性质的单位| 这厮是什么意思| 茔和坟有什么区别| 口是心非是什么动物| cj什么意思| 左肾钙化灶什么意思| 狗狗咬主人意味着什么| 什么是民间故事| kb是什么意思| 双花红棍什么意思| 肺纹理增粗是什么意思| 皮肤偏黄适合穿什么颜色的衣服| 机油什么牌子的好| 时光静好是什么意思| 什么药治脂肪肝| tel是什么意思啊| 右边腰疼是什么原因| 芙蕖是什么意思| 朋友是什么意思| apgar评分是什么意思| 拔气罐有什么好处| 好事多磨是什么意思| 乔迁送什么礼物好| 梦见老宅是什么意思| 记忆是什么意思| 焖是什么意思| 碳酸钠是什么| 属兔的守护神是什么菩萨| 抑郁什么意思| 梦见背小孩是什么意思| 一飞冲天是什么生肖| 月经期喝红糖水有什么好处| 手机什么时候发明的| fte是什么意思| by是什么意思| 梦见剪指甲是什么意思| 香港为什么叫香港| 狗狗不吃饭是什么原因| 百度

兼职是什么

人工智能 深度学习
TensorFlow是谷歌推出的深度学习框架,于2019年发布了第二版。 它是世界上最著名的深度学习框架之一,被行业专家和研究人员广泛使用。
百度 到场的还有很多代表中国官员,有的代表当地政府,有的来自清朝的中央政府和外务部。

什么是Tensorflow?

TensorFlow是谷歌推出的深度学习框架,于2019年发布了第二版。 它是世界上最著名的深度学习框架之一,被行业专家和研究人员广泛使用。

Tensorflow v1难以使用和理解,因为它的Pythonic较少,但是随着Keras发行的v2现在与Tensorflow.keras完全同步,它易于使用,易学且易于理解。

请记住,这不是有关深度学习的文章,所以我希望您了解深度学习的术语及其背后的基本思想。

我们将使用非常著名的数据集IRIS数据集探索深度学习的世界。

废话不多说,我们直接看看代码。

导入和理解数据集

 

  1. from sklearn.datasets import load_iris  
  2. iris = load_iris() 

现在,这个 iris 是一个字典。 我们可以使用下面的代码查看键值

 

  1. >>> iris.keys()  
  2. dict_keys([‘data’, ‘target’, ‘frame’, ‘target_names’, ‘DESCR’, ‘feature_names’, ‘filename’]) 

因此,我们的数据在 data 键中,目标在 targe 键中,依此类推。 如果要查看此数据集的详细信息,可以使用 iris[ ['DESCR']。

现在,我们必须导入其他重要的库,这将有助于我们创建神经网络。

 

  1. from sklearn.model_selection import train_test_split #to split data  
  2. import numpy as np  
  3. import pandas as pd  
  4. import matplotlib.pyplot as plt  
  5. import tensorflow as tf  
  6. from tensorflow.keras.layers import Dense  
  7. from tensorflow.keras.models import Sequential 

在这里,我们从tensorflow中导入了2个主要的东西,分别是Dense和Sequential。 从tensorflow.keras.layers导入的Dense是紧密连接的一种层。 密集连接的层意味着先前层的所有节点都连接到当前层的所有节点。

Sequential是Keras的API,通常称为Sequential API,我们将使用它来构建神经网络。

为了更好地理解数据,我们可以将其转换为数据帧。 我们开始做吧。

 

  1. X = pd.DataFrame(data = iris.data, columns = iris.feature_names)  
  2. print(X.head()) 

  1. X.head() 

请注意,这里我们设置了column = iris.feature_names,其中feature_names是具有所有4个特征名称的键。

同样对于目标,

  1. y = pd.DataFrame(data=iris.target, columns = [‘irisType’]) 

  1. y.head() 

要查看目标集合中的类数量,我们可以使用

  1. y.irisType.value_counts() 

这里我们可以看到我们有3个类,每个类都有标签0、1和2。

  1. iris.target_names #它是iris词典的键值 

这些是我们必须预测的类名称。

机器学习的数据预处理

目前,机器学习的第一步就是数据预处理。数据预处理的主要步骤是:

  • 填入缺失值
  • 将数据分割成为训练集以及验证集
  • 对数据进行标准化处理
  • 将类别性数据转换成为独热向量

缺失值

为了检查是否存在缺失值,我们可以用pandas.DataFrame.info()来进行检查工作。

  1. X.info() 

这样我们就可以看到我们(很幸运地)没有缺失值,并且所有特征都是float64格式的。

分割为训练集和测试集

为了将数据集分割为训练集和测试集,我们可以使用先前已经引入过的sklearn.model_selection中的train_test_split。

  1. X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.1) 

其中test_size是一种声明,它说明我们希望整个数据集的10%被用来做为测试数据。

数据的标准化

一般情况下,当数据的偏差非常大的时候,我们会对数据进行标准化。为了查看偏差值,我们可以使用pandas.DataFrame中的var()函数来检查所有列的偏差值。

  1. X_train.var(), X_test.var() 

这样我们便可以看到,X_train和X_test的偏差值都非常低,因此无需对数据进行标准化。

将分类数据转换为一个独热向量

因为我们知道我们的输出数据是已经使用iris.target_name检查过的3个类之一,所以好消息是,当我们加载目标时,它们已经是0、1、2格式,其中0=1类,1=2类,依此类推。

这种表示方式的问题在于,我们的模型可能会赋予越高的数字更高的优先级,这可能会导致结果有偏差。 因此,为了解决这个问题,我们将使用单热点表示法。 你可以在这里了解更多关于一个热门载体的信息。 我们可以使用内置的KERS TO_CATEGRICAL,也可以使用skLearn中的OneHotEncoding。 我们将使用to_classical。

 

  1. y_train = tf.keras.utils.to_categorical(y_train)  
  2. y_test = tf.keras.utils.to_categorical(y_test) 

我们将只检查前5行,以检查它是否已正确转换。

  1. y_train[:5,:] 

是的,我们已经把它转换成了独热的表达方式。

最后一件事

我们可以做的最后一件事是将我们的数据转换回Numpy数组,这样我们就可以使用一些额外的函数,这些函数将在稍后的模型中对我们有所帮助。 要做到这一点,我们可以使用

 

  1. X_train = X_train.values  
  2. X_test = X_test.values 

让我们看看第一个训练示例的结果是什么。

  1. X_train[0] 

在这里,我们可以看到第一个训练示例中4个特征的值,它的形状是(4),

当我们在它们上使用to_Category时,我们的目标标签已经是数组格式。

机器学习模型

现在,我们终于准备好创建我们的模型并对其进行训练。 我们将从一个简单的模型开始,然后我们将转到复杂的模型结构,在那里我们将介绍Keras中的不同技巧和技术。

让我们对我们的基本模型进行编码

  1. model1 = Sequential() #Sequential Object 

首先,我们必须创建一个Sequential对象。 现在,要创建一个模型,我们所要做的就是根据我们的选择添加不同类型的层。 我们将制作一个10层的Dense层模型,这样我们就可以观察到过拟合,并在以后通过不同的正则化技术来减少它。

 

  1. model1.add( Dense( 64, activation = 'relu', input_shape= X_train[0].shape))  
  2. model1.add( Dense (128, activation = 'relu' 
  3. model1.add( Dense (128, activation = 'relu' 
  4. model1.add( Dense (128, activation = 'relu' 
  5. model1.add( Dense (128, activation = 'relu' 
  6. model1.add( Dense (64, activation = 'relu' 
  7. model1.add( Dense (64, activation = 'relu' 
  8. model1.add( Dense (64, activation = 'relu' 
  9. model1.add( Dense (64, activation = 'relu' 
  10. model1.add( Dense (3, activation = 'softmax'

请注意,在我们的第一层中,我们使用了一个额外的参数INPUT_Shape。 此参数指定第一层的尺寸。 在这种情况下,我们不关心训练示例的数量。 相反,我们只关心功能的数量。 因此,我们传入任何训练示例的形状,在我们的示例中,它是(4,)在input_Shape内。

请注意,我们在输出层中使用了Softmax(激活函数),因为它是一个多类分类问题。 如果这是一个二进制分类问题,我们会使用Sigmoid激活函数。

我们可以传入任何我们想要的激活函数,如Sigmoid或linear或tanh,但实验证明relu在这类模型中表现最好。

现在,当我们定义了模型的形状后,下一步是指定它的损耗、优化器和度量。 我们在keras中使用Compile方法指定这些参数。

  1. model1.compile(optimizer='adam', loss= 'categorical_crossentropy', metrics = ['acc']) 

在这里,我们可以使用任何优化器,如随机梯度下降、RMSProp等,但我们将使用Adam。

我们在这里使用CATEGRICAL_CROSENTROPY是因为我们有一个多类分类问题,如果我们有一个二进制分类问题,我们将使用BINARY_CROSENTROPY。

衡量标准对于评估一个人的模型是很重要的。 我们可以根据不同的度量标准来评估我们的模型。 对于分类问题,最重要的衡量标准是准确度,它表明我们的预测有多准确。

我们模型的最后一步是将其匹配到训练数据和训练标签上。 让我们对它进行编码。

  1. history = model1.fit(X_train, y_train, batch_size = 40, epochs=800, validation_split = 0.1 

fit返回一个回调,其中包含我们训练的所有历史记录,我们可以使用它来执行不同的有用任务,如绘图等。

历史回调有一个名为history的属性,我们可以将其作为history.history进行访问,这是一个包含所有损失和指标历史的字典,即,在我们的示例中,它具有Loss、Acc、val_loses和val_acc的历史记录,并且我们可以将每个单独的历史记录作为 history.history.loss 或 history.history['val_acc'] 等进行访问。

我们有一个指定的epoch数为800,batch大小为40,验证拆分为0.1,这意味着我们现在有10%的验证数据,我们将使用这些数据来分析我们的训练。 使用800个epoch将过度拟合数据,这意味着它将在训练数据上执行得非常好,但在测试数据上则不会。

当模型进行训练时,我们可以看到我们在训练集和验证集上的损失和准确性。

在此,我们可以看到,训练集上的准确率是100%,验证集上的准确率则为67%,这对于这样一个模型来说已经很出色了。接下来就让我们画出图像。

 

  1. plt.plot(history.history['acc'])  
  2. plt.plot(history.history['val_acc'])  
  3. plt.xlabel('Epochs' 
  4. plt.ylabel('Acc' 
  5. plt.legend(['Training''Validation'], loc='upper right'

我们可以很清楚地看到,训练集上的准确率要比验证集上高得多了。

类似地,我们用如下方法画出损失:

 

  1. plt.plot(history.history['loss'])  
  2. plt.plot(history.history['val_loss'])  
  3. plt.xlabel('Epochs' 
  4. plt.ylabel('Loss' 
  5. plt.legend(['Training''Validation'], loc='upper left'

在此,我们可以很清楚地看到,验证集上的损失比训练集上要大得多了,这是因为数据被过拟合了。

为了看看模型的表现是不是好,我们可以使用model.evaluate来查看。我们要将数据和标签放入评估函数中。

  1. model1.evaluate(X_test, y_test) 

这样,我们就可看到模型的准确率为88%,这对于一个过拟合的模型来说已经很好了。

正则化

让我们通过将正则化添加到我们的模型中来使它变得更好。 正则化将减少我们模型的过度拟合,并将改进我们的模型。

我们将在我们的模型中添加L2正则化。 单击 此处了解有关L2正则化的更多信息。 要在我们的模型中添加L2正则化,我们必须指定要添加正则化的层,并给出一个附加参数kernel_Regularizer,然后传递tf.keras.Regularizers.l2()。

我们还将在我们的模型中实现一些dropout,这将帮助我们更好地减少过拟合,从而获得更好的性能。 要阅读更多关于dropout背后的理论和动机,请参阅这篇文章。

让我们重新定义这个模型吧。

 

  1. model2 = Sequential()  
  2. model2.add(Dense(64, activation = 'relu', input_shape= X_train[0].shape))  
  3. model2.add( Dense(128, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  4. ))  
  5. model2.add( Dense (128, activation = 'relu',kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  6. ))  
  7. model2.add(tf.keras.layers.Dropout(0.5)  
  8. model2.add( Dense (128, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  9. ))  
  10. model2.add(Dense(128, activation = 'relu', kernel_regularizer = tf.keras.regularizers.l2(0.001)  
  11. ))  
  12. model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  13. ))  
  14. model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  15. ))  
  16. model2.add(tf.keras.layers.Dropout(0.5)  
  17. model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  18. ))  
  19. model2.add( Dense (64, activation = 'relu', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  20. ))  
  21. model2.add( Dense (3, activation = 'softmax', kernel_regularizer=tf.keras.regularizers.l2(0.001)  
  22. )) 

如果你仔细观察,我们所有的层和参数都是一样的,除了我们在每个dense层中增加了2个dropout层和正则化。

我们将保留所有其他东西(损失、优化器、epoch等)一样。

 

  1. model2.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])  
  2. history2 = model2.fit(X_train, y_train, epochs=800, validation_split=0.1, batch_size=40) 

现在让我们评估一下模型。

你猜怎么着? 通过加入正则化和dropout层,我们的准确率从88%提高到94%。 如果我们增加了BN层,它将会进一步改善。

让我们把它画出来。

准确率

 

  1. plt.plot(history2.history['acc'])  
  2. plt.plot(history2.history['val_acc'])  
  3. plt.title('Accuracy vs. epochs' 
  4. plt.ylabel('Acc' 
  5. plt.xlabel('Epoch' 
  6. plt.legend(['Training''Validation'], loc='lower right' 
  7. plt.show() 

 

  1. plt.plot(history2.history['loss'])  
  2. plt.plot(history2.history['val_loss'])  
  3. plt.title('Loss vs. epochs' 
  4. plt.ylabel('Loss' 
  5. plt.xlabel('Epoch' 
  6. plt.legend(['Training''Validation'], loc='upper right' 
  7. plt.show() 

洞见

如此一来,我们就非常成功地改善了模型的过拟合,并且将模型准确率提升了几乎6%,这对于一个小数据集来说是很好的改善。

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

责任编辑:未丽燕 来源: 雷锋网
相关推荐

2025-08-05 15:21:01

MarkdownHTML

2025-08-05 10:50:08

xcode调试文件

2025-08-05 12:03:36

Objective-C

2025-08-05 13:14:57

TypeScript指南

2025-08-05 11:13:38

UML初学者指南

2025-08-05 15:05:07

预测分析大数据

2025-08-05 09:52:42

JavaScript语言

2025-08-05 07:31:52

JavaScriptasyncawait

2025-08-05 08:50:32

网络管理网络网络性能

2025-08-05 14:27:31

计算机视觉人工智能

2025-08-05 08:13:37

2025-08-05 17:21:53

Scala编程

2025-08-05 15:36:39

Linux日志记录syslogd

2025-08-05 10:56:23

web app

2025-08-05 15:28:45

负载均衡

2025-08-05 08:37:28

2025-08-05 17:36:44

MySQL初学者

2025-08-05 06:00:00

Python编程代码

2025-08-05 10:56:34

Next.jsWeb应用搜索引擎优化

2025-08-05 15:31:09

架构软件开发代码
点赞
收藏

51CTO技术栈公众号

抗体阳性说明什么 吸入甲醛会有什么症状 托人办事送什么礼物较好 白麝香是什么味道 什么是七情六欲
胆碱酯酶是什么意思 胆固醇高是什么病 什么爱 鬼冢虎为什么很少人穿 猫叫是什么意思
红烧肉用什么肉 beyond什么意思 山梨酸钾是什么添加剂 蝎子的天敌是什么 下嘴唇发麻什么病兆
梦见毒蛇是什么预兆 鼻子发干是什么原因造成的 里急后重吃什么药最好 感性是什么意思 美好的近义词是什么
鼻窦炎挂什么科hcv8jop6ns8r.cn 酌情处理是什么意思hcv8jop0ns9r.cn 胎盘下缘达宫颈内口是什么意思hcv7jop9ns4r.cn 做阴超有黄体说明什么hcv8jop9ns0r.cn 女人排卵期有什么反应weuuu.com
天蝎配什么星座hcv7jop9ns5r.cn 宫殿是什么意思hcv8jop7ns8r.cn ecom什么意思hcv7jop4ns8r.cn 天蝎女跟什么星座最配hcv8jop7ns9r.cn 火龙果有什么营养hcv8jop2ns3r.cn
蟑螂卵什么样hcv9jop2ns1r.cn 饱的偏旁叫什么zhongyiyatai.com 又热又冷是什么原因hcv9jop8ns1r.cn 睡觉脚抽筋是什么原因引起的bysq.com 怎么查自己五行缺什么hcv8jop2ns4r.cn
即日是什么意思hcv9jop5ns7r.cn 片仔癀为什么这么贵hcv9jop1ns3r.cn 胃痉挛是什么症状hcv8jop1ns0r.cn 姐姐的女儿叫什么hcv9jop5ns3r.cn 碘化银什么颜色jingluanji.com
百度