写在前面
- 这个系列博客会具体讲讲怎么用tensorflow去搭建网络,其中一些细节例如如何加载数据集、需要哪些包可以参考我的其他博客。以此,来增加自己的编程能力。也会解读一些keras源码等
一、神经网络中有哪些层
- 从连接方式来说:全连接Dense、Conv2D、Conv2DTranspose、RNN等
- 主要的功能层:BN层,激活函数层、Input层,Lambda层、Dropout层、Flatten层、Reshape层等等
二、 利用tf.keras.Squential()构建简单的网络
- 适用情况:
①利用构建简单的全连接或者卷积网络来实现手写数字识别问题
②作为网络的一部分内嵌在网络函数中(例如VAE中的encoder函数和decoder,或者GAN中的判别器和生成器),这种情况将在后面讲,这里不涉及。 - 代码
# 构建一个网络模型
model = tf.keras.Sequential([layer1,layer2,...])
- 数据流
Sequential会构建一个网络计算图,每个边代表数据流。这个计算图会在模型第一次调用fit函数时开始工作(后面会将)
三、后面步骤
1.完成构建网络部分
2.model.compile()
- 此过程被称为装载过程,主要声明我们训练模型时需要什么样{Loss,Optimizer,metrics}
# model.compile
# 使用SGD,LOSS选用稀疏分类交叉熵,metrics与loss对应
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
3.model.fit()
- 此过程可以理解为用我们的训练数据去训练模型
- 数据的处理过程如下:
- tips:
①fit()函数中,x,y必须要不同时为numpy.array,要不同时为tensor
②当x的数据类型为tf.dataset时,i.e.将数据和标签进行了配对,y不用声明
# model.fit()
model.fit(x_train,y_train,batch_size=32,epochs=500,
validation_split=0.2,validation_freq=20)
4.model.summary()
- 这个会使自己清晰的看到自己的网络结构
model.summary()# 打印网络信息
out:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) multiple 15
=================================================================
Total params: 15
Trainable params: 15
Non-trainable params: 0
_________________________________________________________________
5.model.evaluate(x_test,y_test)
- 使用该函数进行模型的评估
# 评估,evaluate函数返回测试集上[loss,metrics_values]
loss,metrics_values = model.evaluate(x_test,y_test)
6.model.predict(input)
- 该函数可以对测试集或其子集进行预测
- tips:input的shape一定要包含batch_size的维度,因为神经网络是按batch进行计算的。
# predict
# 这里只预测了一个
pred = model.predict(x_test[0].reshape(1,32,32,3)) #‘1’为batch_size
四、再送两个知识点
- 假设我们现在在处理图像问题,就比如MNIST数据集
①当我们使用卷积神经网络时,需要将图像提前预处理成含有channel维度的形状,即(batch_size,w,h,chennel),在MNIST数据集中channel=1。
②当我们使用全连接去处理图像的时候,网络的第一层一定是一个Flatten()。这时候图像不需要预处理channel维度,即(batch_size,w,h)就可,在Flatten()层中会自动将channel置为1,即(batch_size,w,h,1)。Flatten()中的keyword positions默认时‘channel_last’
下节预告
- 如何去训练一些特殊的神经网络,例如VAE,GAN等。会使用 Keras Sequential API 与 tf.GradientTape 训练循环编写。
- 尽快更新“如何构建网络(二)”
转载:https://blog.csdn.net/weixin_44441131/article/details/105892591
查看评论