TensorFlow入门实操笔记 1-2
前言碎碎念
无情的Typora笔记搬运工/寒假一定要把TensorFlow这个门入了/随便记记/某种意义上的自我激励/anyway龟龟加油
大纲
1.1 机器学习的思路

2.1 一个神经元的网络
训练完整代码如下:
%config IPCompleter.greedy=True #TAB键代码自动提示
from tensorflow import keras
import numpy as np
#上面两行是对keras和numpy变量的声明or简化
model = keras.Sequential([keras.layers.Dense(units = 1,input_shape = [1])])
model.compile(optimizer = 'sgd',loss = 'mean_squared_error')
#sgd是一种训练方式;loss训练损失;MSE实质是方差
xs = np.array([-1.0,0.0,1.0,2.0,3.0,4.0],dtype = float)
ys = np.array([-3.0,-1.0,1.0,3.0,5.0,7.0],dtype = float)
#xs,ys不同维度的数据;输入训练数据;dtype数据类型,一般用float;
model.fit(xs,ys,epochs = 500)
#epochs,训练次数
print(model.predict([10.0]))
#预测
2.2 加载Fashion MNIST数据库
代码如下(示例):
from tensorflow import keras
fashon_mnist = keras.datasets.fashion_mnist
#把fashion_mnist数据库导出来
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
#train_images,train_labels是训练数据和训练标签,test_images,test_labels测试数据测试标签。后者不能在前者中出现过
import matplotlib.pyplot as plt
print(test_images.shape)
#看看测试数据的图片情况,根据修改images.后面的内容,可以查看不同内容
#如:
plt.imshow(training_images[0])
#展示测试数据中的第一张图片
print(training_labels[0])
#查看训练数据的标签
print(training_images[0])
#查看这张训练数据照片的灰度值 矩阵形式表现
2.3 构造神经元网络模型
代码如下(示例):
#构造神经元模型,三层模型
model = keras.Sequential([ #sequential是构建模型
keras.layers.Flatten(input_shape = (28,28)), #接受输入,shape根据训练的数据图片指定,因为图片是28*28的,所以用28,28
keras.layers.Dense(128,activation = tf.nn.relu), #中间层,128个神经元(自己指定的)
#激活函数,有两种,Relu和Softmax,这里选择使用了relu,所以tf.nn.relu
keras.layers.Dense(10,activation = tf.nn.softmax) #输出层,10个神经元
])

2.4 训练和评估模型
代码如下(示例):
model.compile(optimizer = "adam",loss = "sparse_catagorical_crossentropy",metrics = ['accuracy'])
#指定优化函数和损失函数,输入训练数据。metrics可以看到精度。
model.fit(train_images,train_labels,epochs = 5)
model.evaluate(test_images,test_labels)
训练之前可以先给数据scaling,比如在代码前加一行train_images = train_images/255,将数据压缩到0-1区间,可以有效减小loss,增大accuracy。但是相应的,评估代码(evaluate)前也要把测试数据做好scaling,即test_images = text_images/255。
2.5 自动终止训练
目的:避免神经元网络过拟合。(过拟合:过度训练,把训练数据记住,导致对测试数据的分类效果很差。)
当测试loss和训练loss出现较大分叉,一般就是出现了过拟合。
方法:从callback类中继承一个新类,在类定义中规定一个让训练结束的loss终止值。

代码如下(示例):
#用法
model.fit(training_images.scaled,training.labels,epochs = 5,callbacks = [callbacks])
2.6 第二章总结:数据库+多层(3层)神经元网络+评估+自动终止训练-代码参考
import tensorflow as tf
#导入tensorflow
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('accuracy')>0.99):
print("\nReached 99% accuracy so cancelling training!")
self.model.stop_training = True
#从Callback类中继承一个新的类,让它在准确率>99%时终止训练
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('loss')<0.4):
print("\nReached 60% accuracy so cancelling training!")
self.model.stop_training = True
#另一个版本的继承类,损失小于0.4终止训练
mnist = tf.keras.datasets.mnist
#获取数据集mnist,mnist可以修改成其他数据库
(x_train, y_train),(x_test, y_test) = mnist.load_data() #下载数据集到矩阵里
x_train, x_test = x_train / 255.0, x_test / 255.0 # normalizing(归一)
callbacks = myCallback()
#这步很重要!相当于创建一个类对象,下面通过fit传入到训练中
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
#三层神经元。
#Sequential定义神经网络中的序列模型
#Flatten可以让矩形数据顺利扁平化,即把二位数组变成一维数组
#Dense用于增加一层神经元
#activation,激活函数,目前使用relu和softmax
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
#或者可以optimizer = tf.optimizers.Adam(),
model.fit(x_train, y_train, epochs=10, callbacks=[callbacks])
#epochs训练次数,调用callbacks
model.evaluate(test_images, test_labels)
#如果需要就用evaluate函数,测试图像,报告准确度
本文为TensorFlow初学者提供了一套实用的操作指南,包括机器学习的基本思路、神经元网络的搭建与训练、FashionMNIST数据集的应用等核心内容。文中详细介绍了如何利用Keras API进行数据预处理、构建神经网络模型,并实现自动终止训练等功能。
3370

被折叠的 条评论
为什么被折叠?



