TensorFlow2.0学习使用笔记
简介
Tensorflow2.0使用tf.keras
作为核心api
大大减少使用难度。在2.0中主要清理了废弃的和重复的api
,使用keras
和eager execution
轻松构建模型。
安装
- 官网安装介绍
- 教程官网
pip install tensorflow==2.0.0-beta0 # 预览版
知识点简介
- 设置网络层
model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation=tf.nn.relu),keras.layers.Dense(10, activation=tf.nn.softmax)
])
- 编译模型
在模型准备好进行训练之前,它还需要一些配置。这些是在模型的编译(compile)步骤中添加的:
损失函数 —这可以衡量模型在培训过程中的准确程度。 我们希望将此函数最小化以"驱使"模型朝正确的方向拟合。
优化器 —这就是模型根据它看到的数据及其损失函数进行更新的方式。
评价方式 —用于监控训练和测试步骤。以下示例使用准确率(accuracy),即正确分类的图像的分数。
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
- 训练模型
model.fit(train_images, train_labels, epochs=5)
- 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
- 进行预测
predictions = model.predict(test_images)
- 正则化
为了防止发生过拟合,最好的解决方案是使用更多训练数据。用更多数据进行训练的模型自然能够更好地泛化。如无法采用这种解决方案,则次优解决方案是使用正则化等技术。这些技术会限制模型可以存储的信息的数量和类型。如果网络只能记住少量模式,那么优化过程将迫使它专注于最突出的模式,因为这些模式更有机会更好地泛化。
l2_model = keras.models.Sequential([keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),activation=tf.nn.relu, input_shape=(NUM_WORDS,)),keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),activation=tf.nn.relu),keras.layers.Dense(1, activation=tf.nn.sigmoid)
])
- 添加丢弃层
dpt_model = keras.models.Sequential([keras.layers.Dense(16, activation=tf.nn.relu, input_shape=(NUM_WORDS,)),keras.layers.Dropout(0.5),keras.layers.Dense(16, activation=tf.nn.relu),keras.layers.Dropout(0.5),keras.layers.Dense(1, activation=tf.nn.sigmoid)
])
- 在训练期间保存检查点
在训练期间或训练结束时自动保存检查点。这样一来,您便可以使用经过训练的模型,而无需重新训练该模型,或从上次暂停的地方继续训练,以防训练过程中断。
checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
# Create checkpoint callback
cp_callback = tf.keras.callbacks.ModelCheckpoint(checkpoint_path,save_weights_only=True,verbose=1)
model = create_model()
model.fit(train_images, train_labels, epochs = 10,validation_data = (test_images,test_labels),callbacks = [cp_callback]) # pass callback to training
#------------------手动保存-----------------#
# 手动保存权重
# Save the weights
model.save_weights('./checkpoints/my_checkpoint')# Restore the weights
model = create_model()
model.load_weights('./checkpoints/my_checkpoint')loss,acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))
保存整个模型,整个模型可以保存到一个文件中,其中包含权重值、模型配置乃至优化器配置。这样,您就可以为模型设置检查点,并稍后从完全相同的状态继续训练,而无需访问原始代码。
model = create_model()
model.fit(train_images, train_labels, epochs=5)
# Save entire model to a HDF5 file
model.save('my_model.h5')
#----------------USE--------------#
# Recreate the exact same model, including weights and optimizer.
new_model = keras.models.load_model('my_model.h5')
new_model.summary()
- 加载权重
model.load_weights(checkpoint_path) #创建的模型需要一致
loss,acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))# 加载最新权重
latest = tf.train.latest_checkpoint(checkpoint_dir)
model.load_weights(latest)
loss, acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))
动态图Eager Execution
它允许用户在不创建静态图的情况下运行tensorflow代码。
import tensorflow as tf
tf.enable_eager_execution()
print(tf.square(2) + tf.square(3))
TensorFlow
与Numpy的区别在于,Tensorflow可以使用GPU、TPU加速。在TensorFlow中能够自动把ndarrays转换成Tensor。也可以将Tensor转换为numpy。
import numpy as npndarray = np.ones([3, 3])print("TensorFlow operations convert numpy arrays to Tensors automatically")
tensor = tf.multiply(ndarray, 42)
print(tensor)print("And NumPy operations convert Tensors to numpy arrays automatically")
print(np.add(tensor, 1))print("The .numpy() method explicitly converts a Tensor to a numpy array")
print(tensor.numpy())
自动微分:
x = tf.ones((2, 2))with tf.GradientTape() as t:t.watch(x)y = tf.reduce_sum(x)z = tf.multiply(y, y)# Derivative of z with respect to the original input tensor x
dz_dx = t.gradient(z, x)
for i in [0, 1]:for j in [0, 1]:assert dz_dx[i][j].numpy() == 8.0
基础完整代码
基本分类问题
训练数据格式 (60000, 28, 28);测试数据格式 (10000, 28, 28);标签为:0到9之间的整数。
import tensorflow as tf
from tensorflow import kerasimport numpy as np
import matplotlib.pyplot as pltprint(tf.__version__)## Get Train Data
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
print('train_image_shape {}'.format(train_images.shape))
print('train_labels_shape {}'.format(train_labels.shape))
print('test_image_shape {}'.format(test_images.shape))
print('test_labels_shape {}'.format(test_labels.shape))train_images = train_images / 255.0
test_images = test_images / 255.0#----------Plot 25 Train Picture------------#class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# for i in range(25):
# plt.subplot(5,5,i+1)
# plt.xticks([]) # plt.xticks([-1,0,1],['-1','0','1']) # 第一个:对应X轴上的值,第二个:显示的文字
# plt.yticks([])
# plt.imshow(train_images[i])
# plt.xlabel(class_names[train_labels[i]])
# plt.show()#--------------Seting Model-------------------#model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10, activation='softmax')
])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10)test_loss, test_acc = model.evaluate(test_images, test_labels)print('\nTest accuracy', test_acc)predictions = model.predict(test_images)
print('prediction [0] {}'.format(predictions[0]))#----------------Plot Image------------------#def plot_image(i, predictions_array, true_label, img):predictions_array, true_label, img = predictions_array[i], true_label[i], img[i]plt.grid(False)plt.xticks([])plt.yticks([])plt.imshow(img, cmap=plt.cm.binary)predicted_label = np.argmax(predictions_array)color = 'blue' if predicted_label == true_label else 'red'plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],100 * np.max(predictions_array),class_names[true_label]),color=color)def plot_value_array(i, predictions_array, true_label):predictions_array, true_label = predictions_array[i], true_label[i]plt.grid(False)plt.xticks([])plt.yticks([])thisplot = plt.bar(range(10), predictions_array, color="#777777")plt.ylim([0, 1])predicted_label = np.argmax(predictions_array)thisplot[predicted_label].set_color('red')thisplot[true_label].set_color('blue')# 绘制前X个测试图像,预测标签和真实标签
# 以蓝色显示正确的预测,红色显示不正确的预测
num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):plt.subplot(num_rows, 2*num_cols, 2*i+1)plot_image(i, predictions, test_labels, test_images)plt.subplot(num_rows, 2*num_cols, 2*i+2)plot_value_array(i, predictions, test_labels)
plt.show()
文本分类
import tensorflow as tf
from tensorflow import keras# 下载数据集,数据shape都为(25000,) 影评文本已转换为整数,其中每个整数都表示字典中的一个特定字词。每条文本长度不一致。
imdb = keras.datasets.imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
影评(整数数组)必须转换为张量,然后才能馈送到神经网络中。我们可以通过以下两种方法实现这种转换:
对数组进行独热编码,将它们转换为由 0 和 1 构成的向量。例如,序列 [3, 5] 将变成一个 10000 维的向量,除索引 3 和 5 转换为 1 之外,其余全转换为 0。然后,将它作为网络的第一层,一个可以处理浮点向量数据的密集层。不过,这种方法会占用大量内存,需要一个大小为
num_words
*num_reviews
的矩阵。或者,我们可以填充数组,使它们都具有相同的长度,然后创建一个形状为
max_length
*num_reviews
的整数张量。我们可以使用一个能够处理这种形状的嵌入层作为网络中的第一层。
在本教程中,我们将使用第二种方法。
# A dictionary mapping words to an integer index
word_index = imdb.get_word_index()# The first indices are reserved
word_index = {k:(v+3) for k,v in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2 # unknown
word_index["<UNUSED>"] = 3train_data = keras.preprocessing.sequence.pad_sequences(train_data,value=word_index["<PAD>"],padding='post',maxlen=256)test_data = keras.preprocessing.sequence.pad_sequences(test_data,value=word_index["<PAD>"],padding='post',maxlen=256)
vocab_size = 10000
按顺序堆叠各个层以构建分类器:
- 第一层是 Embedding 层。该层会在整数编码的词汇表中查找每个字词-索引的嵌入向量。模型在接受训练时会学习这些向量。这些向量会向输出数组添加一个维度。生成的维度为:(batch, sequence, embedding)。
- 接下来,一个 GlobalAveragePooling1D 层通过对序列维度求平均值,针对每个样本返回一个长度固定的输出向量。这样,模型便能够以尽可能简单的方式处理各种长度的输入。
该长度固定的输出向量会传入一个全连接 (Dense) 层(包含 16 个隐藏单元)。 - 最后一层与单个输出节点密集连接。应用 sigmoid 激活函数后,结果是介于 0 到 1 之间的浮点值,表示概率或置信水平。
model = keras.Sequential()
model.add(keras.layers.Embedding(vocab_size, 16))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16, activation=tf.nn.relu))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))model.summary()
model.compile(optimizer=tf.optimizers.Adam(),loss='binary_crossentropy',metrics=['accuracy'])x_val = train_data[:10000]
partial_x_train = train_data[10000:]y_val = train_labels[:10000]
partial_y_train = train_labels[10000:]history = model.fit(partial_x_train,partial_y_train,epochs=40,batch_size=512,validation_data=(x_val, y_val),verbose=1)results = model.evaluate(test_data, test_labels)
print('results'.format(results))history_dict = history.history
history_dict.keys()import matplotlib.pyplot as pltacc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']epochs = range(1, len(acc) + 1)# "bo" is for "blue dot"
plt.plot(epochs, loss, 'bo', label='Training loss')
# b is for "solid blue line"
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()plt.show()
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!
TensorFlow2.0学习使用笔记相关推荐
- TensorFlow2.0 学习笔记(三):卷积神经网络(CNN)
欢迎关注WX公众号:[程序员管小亮] 专栏--TensorFlow学习笔记 文章目录 欢迎关注WX公众号:[程序员管小亮] 专栏--TensorFlow学习笔记 一.神经网络的基本单位:神经元 二.卷 ...
- Tensorflow2.0学习笔记(一)
Tensorflow2.0学习笔记(一)--MNIST入门 文章目录 Tensorflow2.0学习笔记(一)--MNIST入门 前言 一.MNIST是什么? 二.实现步骤及代码 1.引入库 2.下载 ...
- Tensorflow2.0学习笔记(二)
Tensorflow2.0学习笔记(二)--Keras练习 文章目录 Tensorflow2.0学习笔记(二)--Keras练习 前言 二.使用步骤 1.实现步骤及代码 2.下载 Fashion MN ...
- Tensorflow2.0学习笔记(一)北大曹健老师教学视频1-4讲
Tensorflow2.0学习笔记(一)北大曹健老师教学视频1-4讲 返回目录 这个笔记现在是主要根据北京大学曹健老师的视频写的,这个视频超级棒,非常推荐. 第一讲 常用函数的使用(包含了很多琐碎的函 ...
- Tensorflow2.0学习笔记(二)北大曹健老师教学视频第五讲
Tensorflow2.0学习笔记(二)北大曹健老师教学视频第五讲 返回目录 理论部分主要写点以前看吴恩达视频没有的或者不太熟悉的了. 5.1卷积计算过程 实际项目中的照片多是高分辨率彩色图,但待优化 ...
- tensorflow2.0 学习笔记:一、神经网络计算
mooc课程Tensorflow2.0 笔记 人工智能三学派 行为主义:基于控制论,构建感知-动作控制系统(自适应控制系统) 符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式 ...
- TensorFlow2.0学习笔记2-tf2.0两种方式搭建神经网络
目录 一,TensorFlow2.0搭建神经网络八股 1)import [引入相关模块] 2)train,test [告知喂入网络的训练集测试集以及相应的标签] 3)model=tf.keras. ...
- tensorflow2.0学习笔记(五)
Keras高层API 基本就是4步: Matrics update_state result().numpy() reset_states(就是清除缓存) tensorflow2.0代码很简单,就MN ...
- TensorFlow2.0学习
文章目录 一.TensorFlow的建模流程 1.1 结构化数据建模流程范例 1.1.1 准备数据 1.1.2 定义模型 1.1.3 训练模型 1.1.4 评估模型 1.1.5 使用模型 1.1.6 ...
- 管理3.0 学习词汇笔记 五 复杂理论
词汇管理3.0 学习笔记 五 复杂理论 断言 1.任何复杂问题都有一个清晰,简单但错误的答案. 2.因果律:事情会按计划发生.能计算2061 哈雷重返太阳系,确不能确定下个星期的天气.因素多且关系 ...
最新文章
- FaceShifter:一秒换脸的人脸交换模型
- .NET Remoting中的通道注册
- Java性能问题定位
- java quartz 跳过_Java Quartz计划作业-禁止同时执行作业
- Typecho双栏博客免费主题—Splity
- Openstack 平台部署安装
- java搜索引擎创建索引_搜索引擎系列 ---lucene简介 创建索引和搜索初步
- 【LA3487】最小割-经典模型 两种方法
- HyperLedger的共识( Consensus)
- dos命令行设置网络优先级_实用批处理:不用下软件就能 批量改名,修复网络,删除小文件...
- PHP判断访客是否移动端浏览器访问的四种方法
- 串口通讯---实现 PC 端之间串口连接传输文件
- 计算机科学和机器学习中的代数、拓扑、微积分和最优化理论
- QT笔记——Qt动态属性 之 unpolish() 和 polish()
- 牛客网 水题 递推找规律
- SWF代码分析与破解之路 (YueTai VIP视频信息获取工具) Socket续篇
- 记一次针对鹅厂的盗号追踪——盗号,朋友,以及妹子的故事
- 上海交通大学转专业到计算机,2018级自主转专业终审公示
- 系统集成项目管理工程师案例分析考点汇总(范围管理)
- 联合应用开发 JAD