TensorFlow入门实操笔记 1-2

本文为TensorFlow初学者提供了一套实用的操作指南,包括机器学习的基本思路、神经元网络的搭建与训练、FashionMNIST数据集的应用等核心内容。文中详细介绍了如何利用Keras API进行数据预处理、构建神经网络模型,并实现自动终止训练等功能。

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函数,测试图像,报告准确度

总结碎碎念

总结不知道写啥,不过为了第一次模板的完整,就说明天也要加油鸭!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值