使用Tensorboard分析模型-使用Python、TensorFlow和Keras p.4深入学习基础知识

欢迎使用Python、TensorFlow和Keras教程系列深入学习基础知识的第4部分。在这部分,我们要讨论的是TensorBoard。TensorBoard是一个方便的应用程序,允许您在浏览器中查看模型的各个方面。

我们在Keras中使用TensorBoard的方式是通过Keras回调。实际上有相当多的Keras回调,您可以自己做。一定要看看其他人:Keras回调。例如,ModelCheckpoint是另一种有用的方法。然而,就目前而言,我们将把重点放在TensorBoard回调。我们

首先,我们需要在我们的进口产品中增加以下内容:

from tensorflow.keras.callbacks import TensorBoard
现在我们要使TensorBoard回调对象:

NAME = “Cats-vs-dogs-CNN”

tensorboard = TensorBoard(log_dir=“logs/{}”.format(NAME))
最终,您将希望通过您的NAME但这暂时还可以。因此,这将将模型的培训数据保存到logs/NAME,然后由TensorBoard阅读。

最后,我们可以将这个回调添加到我们的模型中,方法是将它添加到.fit方法,例如:

model.fit(X, y,
batch_size=32,
epochs=3,
validation_split=0.3,
callbacks=[tensorboard])
注意callbacks是一份名单。您也可以将其他回调传递到此列表中。我们的模型还没有定义,所以现在让我们把所有这些放在一起:

import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D

more info on callbakcs: https://keras.io/callbacks/ model saver is cool too.

from tensorflow.keras.callbacks import TensorBoard
import pickle
import time

NAME = “Cats-vs-dogs-CNN”

pickle_in = open(“X.pickle”,“rb”)
X = pickle.load(pickle_in)

pickle_in = open(“y.pickle”,“rb”)
y = pickle.load(pickle_in)

X = X/255.0

model = Sequential()

model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:]))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(256, (3, 3)))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))

model.add(Dense(1))
model.add(Activation(‘sigmoid’))

tensorboard = TensorBoard(log_dir=“logs/{}”.format(NAME))

model.compile(loss=‘binary_crossentropy’,
optimizer=‘adam’,
metrics=[‘accuracy’],
)

model.fit(X, y,
batch_size=32,
epochs=3,
validation_split=0.3,
callbacks=[tensorboard])
Train on 17441 samples, validate on 7475 samples
Epoch 1/3
17441/17441 [] - 13s 723us/step - loss: 0.6857 - acc: 0.5755 - val_loss: 0.6480 - val_acc: 0.6300
Epoch 2/3
17441/17441 [
] - 12s 712us/step - loss: 0.6488 - acc: 0.6299 - val_loss: 0.6327 - val_acc: 0.6527
Epoch 3/3
17441/17441 [==============================] - 12s 714us/step - loss: 0.6073 - acc: 0.6747 - val_loss: 0.5888 - val_acc: 0.6943
<tensorflow.python.keras.callbacks.History at 0x28bb5da42b0>
运行此命令之后,您应该有一个名为logs。我们现在可以使用tensorboard可视化这个目录的初始结果。打开控制台,切换到工作目录,然后键入:tensorboard --logdir=logs/。你应该看到这样的告示:TensorBoard 1.10.0 at http://H-PC:6006 (Press CTRL+C to quit)“hpc”可能是你机器的名字。打开浏览器并前往此地址。你应该看到这样的东西:

在这里插入图片描述
现在我们可以看到,随着时间的推移,我们的模型是如何运作的。让我们改变模型中的一些东西。首先,我们从来没有给我们的致密层增加过激活。另外,让我们尝试一种更小的总体模型:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D

more info on callbakcs: https://keras.io/callbacks/ model saver is cool too.

from tensorflow.keras.callbacks import TensorBoard
import pickle
import time

NAME = “Cats-vs-dogs-64x2-CNN”

pickle_in = open(“X.pickle”,“rb”)
X = pickle.load(pickle_in)

pickle_in = open(“y.pickle”,“rb”)
y = pickle.load(pickle_in)

X = X/255.0

model = Sequential()

model.add(Conv2D(64, (3, 3), input_shape=X.shape[1:]))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation(‘relu’))

model.add(Dense(1))
model.add(Activation(‘sigmoid’))

tensorboard = TensorBoard(log_dir=“logs/{}”.format(NAME))

model.compile(loss=‘binary_crossentropy’,
optimizer=‘adam’,
metrics=[‘accuracy’],
)

model.fit(X, y,
batch_size=32,
epochs=10,
validation_split=0.3,
callbacks=[tensorboard])
Train on 17441 samples, validate on 7475 samples
Epoch 1/10
17441/17441 [] - 5s 289us/step - loss: 0.6523 - acc: 0.5997 - val_loss: 0.8054 - val_acc: 0.5663
Epoch 2/10
17441/17441 [
] - 5s 270us/step - loss: 0.5374 - acc: 0.7320 - val_loss: 0.5038 - val_acc: 0.7516
Epoch 3/10
17441/17441 [] - 5s 268us/step - loss: 0.4617 - acc: 0.7812 - val_loss: 0.4969 - val_acc: 0.7658
Epoch 4/10
17441/17441 [
] - 5s 270us/step - loss: 0.4065 - acc: 0.8163 - val_loss: 0.4603 - val_acc: 0.7821
Epoch 5/10
17441/17441 [] - 5s 271us/step - loss: 0.3434 - acc: 0.8477 - val_loss: 0.5129 - val_acc: 0.7692
Epoch 6/10
17441/17441 [
] - 5s 269us/step - loss: 0.2696 - acc: 0.8841 - val_loss: 0.5502 - val_acc: 0.7766
Epoch 7/10
17441/17441 [] - 5s 272us/step - loss: 0.1932 - acc: 0.9228 - val_loss: 0.5870 - val_acc: 0.7755
Epoch 8/10
17441/17441 [
] - 5s 270us/step - loss: 0.1284 - acc: 0.9527 - val_loss: 0.6952 - val_acc: 0.7789
Epoch 9/10
17441/17441 [] - 5s 272us/step - loss: 0.0670 - acc: 0.9792 - val_loss: 0.8279 - val_acc: 0.7802
Epoch 10/10
17441/17441 [
] - 5s 270us/step - loss: 0.0444 - acc: 0.9869 - val_loss: 0.9392 - val_acc: 0.7783
<tensorflow.python.keras.callbacks.History at 0x28b882af240>
除其他外,我还将名字改为NAME = “Cats-vs-dogs-64x2-CNN”。不要忘记这样做,否则你会附加到你以前的模型的日志,而不是偶然,它看起来不会太好。现在让我们检查一下Tensorboard:在这里插入图片描述
看上去好多了!但是,您可能会立即注意到验证丢失的形状。损失是错误的衡量标准,很明显,在我们的第四个时代之后,事情开始变糟了。有趣的是,我们的验证精度仍然保持不变,但我认为它最终会开始下降。更有可能的是,首先要遭受的是你的验证损失。这应该会提醒你,你几乎肯定开始过度健康。之所以会发生这种情况,是因为模型不断地试图减少样本中的损失。在某种程度上,模型不是学习关于实际数据的一般内容,而是开始记忆输入数据。如果你让这种情况继续下去,是的,你在样本中的“准确性”会提高,但是你的样本外,以及你试图为模型提供的任何新数据,都会表现不佳。

在下一个教程中,我们将讨论如何使用TensorBoard来优化您对数据使用的模型。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值