机器学习实战第二版---第五节:神经网络

环境搭建

使用anaconda搭建tensorflow2.0的环境,创建第一个模型,使用keras学习库中的序贯模型
1.了解keras
在这里插入图片描述

在这里插入图片描述
3.shape在这里插入图片描述构建如下网络:在这里插入图片描述

几个注意点:
1.在做输出层的选择上:创建模型后必须compile()方法来指定损失函数和要使用的优化器 交叉熵
MLP.compile(loss=‘sparse_categorical_crossentropy’,optimizer=‘SGD’,metrics=[‘accuracy’])
‘’’
用"sparse_categorical_crossentropy"损失,因为我们具有稀疏标签
(即对于每个实例,只有一个目标类索引,在这种情况下为0到9),并
且这些类是互斥的。相反,如果每个实例的每个类都有一个目标概率
(例如独热向量,[0.,0.,0.,1.,0.,0.,0.,0.,0.,0]代表类
3),则我们需要使用"categorical_crossentropy"损失。如果我们正
在执行二进制分类(带有一个或多个二进制标签),则在输出层中使
用"sigmoid"(即逻辑)激活函数,而不是"softmax"激活函数,并且使
用"binary_crossentropy"损失。

如果要将稀疏标签(即类索引)转换为独热向量标签,使用
keras.utils.to_categorical()函数。反之则使用np.argmax()函
数和axis=1

2.在模型训练上:
1.validation_split设置为希望Keras用于验证的训练
集的比率,而不是使用validation_data参数传递验证集。例如,
validation_split=0.1告诉Keras使用数据的最后10%(在乱序之前)
进行验证
2.在进行验证的时候可以不使用validation_data参数传递验证集。例如,
validation_split=0.1告诉Keras使用数据的最后10%(在乱序之前)
进行验证。
3.训练集非常不平衡,其中某些类的代表过多,而其他类的代表
不足,那么在调用fit()方法时设置class_weight参数会很有用,这
给代表性不足的类更大的权重,给代表过多的类更小的权重。

**最后结果:**可以明显看出整个曲线都在逐渐的趋于拟合,训练集和验证集的损失逐步减小,对于后续的调参后面专门出一期
在这里插入图片描述

全部代码
如下:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Flatten
import pandas as pd
import matplotlib.pyplot as plt



fashion_mnist = keras.datasets.fashion_mnist
(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist.load_data()
print(X_train_full.shape,X_test.dtype)
'''
创建验证集,将像素强度降低到0-1范围
'''
X_valid, X_train = X_train_full[:5000] / 255.0, X_train_full[5000:] / 255.0
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]

class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",
               "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]
print(class_names[y_train[100]])

'''
创建两个隐藏层地分类MLP
'''
MLP = keras.models.Sequential()#创建一个序贯模型,往里面加层数
MLP.add(Flatten(input_shape=[28,28]))#Flatten压平:多维度输入一维化,常用在从卷积层到全连接层的过渡
MLP.add(Dense(300,activation='relu'))#有300个神经元的Dense隐藏层。自己的权重矩阵,其中包含神经元及其输入之间的所有连接权重
MLP.add(Dense(100,activation='relu'))
MLP.add(Dense(10,activation="softmax"))
'''
或者以一个列表的形式添加
model = keras.models.Sequential([ 
    keras.layers.Flatten(input_shape=[28, 28]), 
    keras.layers.Dense(300, activation="relu"), 
    keras.layers.Dense(100, activation="relu"), 
    keras.layers.Dense(10, activation="softmax") 
]) 
'''
#查看模型的结构
MLP.summary()
#查看每一层
print(MLP.layers)
hidden1=MLP.layers[1]
print(hidden1.name)
#访问层的所有参数get_weights()和set_weights()
weights,bais=hidden1.get_weights()
print(weights,weights.shape)
print(bais)
'''
权重矩阵的形状取决于输入的个数。这就是在Sequential模型
中创建第一层时建议指定input_shape的原因。但是,如果你不指定输
入形状,那也是可以的:Keras会等到知道输入形状后才真正构建模
型。当你向其提供实际数据时(例如,在训练期间),或者在调用其
build()方法时,就会发生这种情况。

'''
#创建模型后必须compile()方法来指定损失函数和要使用的优化器 交叉熵
MLP.compile(loss='sparse_categorical_crossentropy',optimizer='SGD',metrics=['accuracy'])
'''
用"sparse_categorical_crossentropy"损失,因为我们具有稀疏标签
(即对于每个实例,只有一个目标类索引,在这种情况下为0到9),并
且这些类是互斥的。相反,如果每个实例的每个类都有一个目标概率
(例如独热向量,[0.,0.,0.,1.,0.,0.,0.,0.,0.,0]代表类
3),则我们需要使用"categorical_crossentropy"损失。如果我们正
在执行二进制分类(带有一个或多个二进制标签),则在输出层中使
用"sigmoid"(即逻辑)激活函数,而不是"softmax"激活函数,并且使
用"binary_crossentropy"损失。

如果要将稀疏标签(即类索引)转换为独热向量标签,使用
keras.utils.to_categorical()函数。反之则使用np.argmax()函
数和axis=1
'''
history =MLP.fit(X_train, y_train, epochs=30, validation_data=(X_valid,y_valid))
'''
1.validation_split设置为希望Keras用于验证的训练
集的比率,而不是使用validation_data参数传递验证集。例如,
validation_split=0.1告诉Keras使用数据的最后10%(在乱序之前)
进行验证
2.在进行验证的时候可以不使用validation_data参数传递验证集。例如,
validation_split=0.1告诉Keras使用数据的最后10%(在乱序之前)
进行验证。
3.训练集非常不平衡,其中某些类的代表过多,而其他类的代表
不足,那么在调用fit()方法时设置class_weight参数会很有用,这
给代表性不足的类更大的权重,给代表过多的类更小的权重。
'''
pd.DataFrame(history.history).plot(figsize=(8,5))
plt.grid(True)
plt.gca().set_ylim(0, 1) # set the vertical r
plt.show()
'''
可以使用evaluate()方法调节参数轻松
'''
``

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习实战:基于scikit-learn和tensorflow是一本介绍机器学习算法和实现的书籍。其中,scikit-learn是一个Python的机器学习库,提供了许多经典的机器学习算法和工具,如分类、回归、聚类、降维等。而tensorflow则是一个由Google开发的深度学习框架,可以用于构建神经网络、卷积神经网络、循环神经网络深度学习模型。本书通过实例演示,让读者了解机器学习的基本概念和方法,并学会如何使用scikit-learn和tensorflow实现机器学习算法。 ### 回答2: 机器学习实战:基于scikit-learn和tensorflow是一本非常实用的机器学习实战教程,对入门和进阶学习者都很友好。 首先,这本书用通俗易懂的语言介绍了机器学习的基本概念,如监督学习、非监督学习、聚类、分类等。随后,它详细解释了scikit-learn和tensorflow的基本原理,这是非常重要的,因为这两个框架是用Python编程实现机器学习所必需的。书中还提供了一些实际案例的例子,使读者能够亲身体验机器学习算法的工作原理和实际应用。 然后,作者深入讲解了各种机器学习算法,如朴素贝叶斯、k-近邻、支持向量机、决策树和逻辑回归等。这样读者就能了解每个算法的优缺点,以及选择何种算法解决不同的问题。此外,本书还讲述了如何使用Python语言构建机器学习模型,包括训练、测试和评估模型的过程。 最后,基于深度学习,这本书提供了一些tensorflow的实例,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks),帮助用户更有效的解决复杂问题。 总之,机器学习实战:基于scikit-learn和tensorflow是一个非常有用的教程,旨在帮助学习者从入门到进阶有效地学习机器学习,并在实践中运用各种机器学习算法。它不仅可以增强学生的知识储备,而且能够为专业人士提供实际应用的实例。 ### 回答3: 机器学习实战:基于scikit-learn和tensorflow是一本由Aurélien Géron撰写的实用机器学习指南。书中介绍了机器学习的基础概念、算法以及如何在实际中应用这些算法。书中所使用的主要库包括scikit-learn和tensorflow。这两个库分别代表了传统的机器学习方法和深度学习方法。 书中首先介绍了机器学习的基础概念和流程,包括数据预处理、特征工程、模型选择和评估等内容。然后详细介绍了常用的机器学习算法,包括线性回归、逻辑回归、决策树、随机森林、支持向量机、神经网络等。每个算法都配有清晰的代码实现和演示案例,让读者可以更好地理解算法的原理和应用场景。 在介绍完传统的机器学习算法后,书中又详细介绍了深度学习的基础概念和应用。深度学习已经成为目前最流行的机器学习方法之一,具有很强的表征能力和预测性能。书中介绍了如何使用tensorflow构建神经网络,包括前向传播、反向传播、dropout等技术。同时,书中还介绍了很多工具和技术,如keras、tensorboard、图像处理等,用于辅助深度学习的应用。 总体来说,机器学习实战:基于scikit-learn和tensorflow这本书对于入门机器学习的读者来说是很不错的选择。它非常详细地介绍了机器学习深度学习的原理和应用,并提供了很多实际案例和代码实现,让读者可以更好地理解和掌握这些技术。同时,书中所使用的库也是相对比较流行的,在实际应用中具有较高的参考价值。如果你想学习机器学习深度学习,这本书值得一读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值