tensorflow基础入门篇(二)——Keras

tensorflow基础入门——第二章节

文章目录

    • tensorflow基础入门——第二章节
    • 2.Keras
      • 2.1 WHY KERAS
      • 2.1.2 图片读取处理
      • 2.1.3 NHWC与NCHW
      • 2.2 神经网络原理
      • 2.2.1 softmax回归
      • 2.2.2 交叉熵损失
    • 2.3 Keras Sequential 顺序模型
    • 2.4案例:实现多层神经网络进行时装分类
      • 2.4.1读取数据集
      • 2.4.2datasets
      • 2.4.3建立神经网络模型
      • 2.4.4编译模型优化器、损失、准确率
      • 2.4.5进行fit训练
      • 2.4.6评估模型测试效果
    • 2.4

2.Keras

2.1 WHY KERAS

首先要知道tf直接开发需要对神经网络有全面清晰的认知、基本功要扎实
tf的API是低级API,开发起来有难度,考验编程者水平。
keras 在tf的基础上开发出高级API,降低入门难度
Keras遵循减少认知困难的最佳实践:它提供一致且简单的API,它将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。
●因为Keras与底层深度学习语言(特别是TensorFlow) 集成在一起,所以它可以让你实现任何你可以用基础语言编写的东西。特别是,tf. keras作为Keras API可以与TensorFlow 工作流无缝集成。
Keras被工业界和学术界广泛采用
官方文档:
https://keras.io/zh/
https://www.keraschina.com/keras_intro/
http://tensornews.cn/
http://woshicver.com/

2.1.2 图片读取处理

●要使用该模块需要下载图片读取库

pip install pillow

图片特征值处理-图片大小
●统一到一个大小, 神经网络模型要求图片的大小必须固定。300 * 300
●减少训练的计算开销
每个像素点,都是0~255之间

load_img(path=filepath, target. size)
img_to_array(img, data. format=None, dtype=None)

2.1.3 NHWC与NCHW

设置为"NHWC"时,排列顺序为[batch, height, width, channels];
设置为"NCHW"时,排列顺序为[batch, channels, height, width]。
Tensorflow默认的[height, width, channel]
●tf.reshape不能对于一维中按照RGB排列方式做channel_last变换,只能做channel_first转换,否则转换结构错误
●怎么做:

  • 1、首先reshape:[channel, height, width]
  • 2、进行tf.transpose(depth_major, [1, 2, 0]).eval(), 维度位置的替换,[height, width, channel]

2.2 神经网络原理

2.2.1 softmax回归

2.2.2 交叉熵损失

参考:https://zhuanlan.zhihu.com/p/63731947

2.3 Keras Sequential 顺序模型

顺序模型是多个网络层的线性堆叠。

你可以通过将网络层实例的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

Dense:
Dense即全连接层,逻辑上等价于这样一个函数:
权重W为m*n的矩阵.输入x为n维向量.激活函数Activation.
偏置bias.输出向量out为m维向量.
out=Activation(Wx+bias).
即一个线性变化加一个非线性变化产生输出.这是深度神经网络非常基本又十分强大的结构。它的能力可以参考万能近似定理.很多其他的层,比如卷积层,都是在全连接的基础上加了很多先验形成的。

(材料链接:https://www.zhihu.com/question/335678541/answer/756464930)
优化算法:

from tensorflow.python.keras.optimizers import SGD
from tensorflow.python.keras.losses import binary_ crossentropy
from tensorflow.python.keras.losses import categorical .crossentropy
from tensorflow.python.keras.losses import sparse.categorical.crossentropy

model.compile()

  • 优化器,损失计算,准确率
  • sparse_categorical.crossentropy:对于 目标值是整型的进行交叉熵损失计算
  • categorical_crossentropy:对于两个output tensor and a target tensor进行交叉熵损失计算

model.fit(x=None,y=None,batch_ size=None,epochs=1.callbacks=None)

tensorflow基础入门篇(二)——Keras_第1张图片
tensorflow基础入门篇(二)——Keras_第2张图片

2.4案例:实现多层神经网络进行时装分类

案例步骤:

2.4.1读取数据集

2.4.2datasets

2.4.3建立神经网络模型

进行模型编写
双层: 128个神经元,全连接层10个类别输出
Dense(128, activation=tf.nn.relu):
定义网络结构以及初始化权重偏置参数

class SingleNN(object) :
	model = keras.Sequential( [
		keras.layers.Flatten( input_ shape=(2828)),
		keras.layers.Dense(128,activation=tf.nn.relu),
		keras.layers.Dense(10,activation=tf.nn.softmax)
])

这里我们model只是放在类中,作为类的固定模型属性,这里的激活函数暂时使用tf.nn.relu函数

2.4.4编译模型优化器、损失、准确率

编译定义优化过程:
这里选择我们SGD优化器
keras.optimizers.SGD(keras. opt imizers. SGD(lr=0.01)
loss:tf.keras.losses.sparse_ categorical_crossentropy
metrics: accuracy

def compile(self) :
	SingleNN.model.compile( opt imizer=keras.opt imizers.SGD(lr=0.01),
	loss=tf.keras.losses.sparse_categorical_crossentropy,
	metrics=['accuracy'])
	return None

2.4.5进行fit训练

训练:
关于迭代次数与每次迭代样本数
设置batch_size=32或者128查看效果(值如何设置,优化部分会进行讲解)

def fit(self) :
	SingleNN.model.fit(self.train, self.train_label, epochs=5,batch_size=32 )
	return None

2.4.6评估模型测试效果

def evaluate(self) :
	test_loss, test_acc = SingleNN.model.evaluate(self.test, self.test_label)
	print(test_loss, test_acc)
	return None

2.4

Keras之Conv2D
参考:https://blog.csdn.net/econe_wei/article/details/94649003

你可能感兴趣的