标签:value closed dimens lse ini tip save spl show
目录
Installation
Curves
Image Visualization
pip install tensorboard
Listen logdir
build summary instance
fed data into summary instance
import datetime
import tensorflow as tf
current_time = datetime.datetime.now().strftime('%Y%m%d-%H%M%s')
log_dir = 'logs/' + current_time
summary_writer = tf.summary.create_file_writer(log_dir)
with summary_writer.as_default():
tf.summary.scalar('loss', float(loss), step=epoch)
tf.summary.scalar('accuracy', float(train_accuracy), step=epoch)
sample_img = next(iter(db))[0]
sample_img = sample_img[0]
sample_img = tf.reshape(sample_img, [1, 28, 28, 1])
with summary_writer.as_default():
tf.summary.image('Traning sample:', sample_img, step=0)
val_images = x[:25]
val_images = tf.reshape(val_images, [-1, 28, 28, 1])
with summary_writer.as_default():
tf.summary.scalar('test-acc', float(loss), step=step)
tf.summary.image('val-onebyone-images:',
val_images,
max_output=25,
step=step)
import tensorflow as tf
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
import datetime
from matplotlib import pyplot as plt
import io
def preprocess(x, y):
x = tf.cast(x, dtype=tf.float32) / 255.
y = tf.cast(y, dtype=tf.int32)
return x, y
def plot_to_image(figure):
"""Converts the matplotlib plot specified by 'figure' to a PNG image and
returns it. The supplied figure is closed and inaccessible after this call."""
# Save the plot to a PNG in memory.
buf = io.BytesIO()
plt.savefig(buf, format='png')
# Closing the figure prevents it from being displayed directly inside
# the notebook.
plt.close(figure)
buf.seek(0)
# Convert PNG buffer to TF image
image = tf.image.decode_png(buf.getvalue(), channels=4)
# Add the batch dimension
image = tf.expand_dims(image, 0)
return image
def image_grid(images):
"""Return a 5x5 grid of the MNIST images as a matplotlib figure."""
# Create a figure to contain the plot.
figure = plt.figure(figsize=(10, 10))
for i in range(25):
# Start next subplot.
plt.subplot(5, 5, i + 1, title='name')
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(images[i], cmap=plt.cm.binary)
return figure
batchsz = 128
(x, y), (x_val, y_val) = datasets.mnist.load_data()
print('datasets:', x.shape, y.shape, x.min(), x.max())
db = tf.data.Dataset.from_tensor_slices((x, y))
db = db.map(preprocess).shuffle(60000).batch(batchsz).repeat(10)
ds_val = tf.data.Dataset.from_tensor_slices((x_val, y_val))
ds_val = ds_val.map(preprocess).batch(batchsz, drop_remainder=True)
network = Sequential([
layers.Dense(256, activation='relu'),
layers.Dense(128, activation='relu'),
layers.Dense(64, activation='relu'),
layers.Dense(32, activation='relu'),
layers.Dense(10)
])
network.build(input_shape=(None, 28 * 28))
network.summary()
optimizer = optimizers.Adam(lr=0.01)
current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
log_dir = 'logs/' + current_time
summary_writer = tf.summary.create_file_writer(log_dir)
# get x from (x,y)
sample_img = next(iter(db))[0]
# get first image instance
sample_img = sample_img[0]
sample_img = tf.reshape(sample_img, [1, 28, 28, 1])
with summary_writer.as_default():
tf.summary.image("Training sample:", sample_img, step=0)
for step, (x, y) in enumerate(db):
with tf.GradientTape() as tape:
# [b, 28, 28] => [b, 784]
x = tf.reshape(x, (-1, 28 * 28))
# [b, 784] => [b, 10]
out = network(x)
# [b] => [b, 10]
y_onehot = tf.one_hot(y, depth=10)
# [b]
loss = tf.reduce_mean(
tf.losses.categorical_crossentropy(y_onehot, out,
from_logits=True))
grads = tape.gradient(loss, network.trainable_variables)
optimizer.apply_gradients(zip(grads, network.trainable_variables))
if step % 100 == 0:
print(step, 'loss:', float(loss))
with summary_writer.as_default():
tf.summary.scalar('train-loss', float(loss), step=step)
# evaluate
if step % 500 == 0:
total, total_correct = 0., 0
for _, (x, y) in enumerate(ds_val):
# [b, 28, 28] => [b, 784]
x = tf.reshape(x, (-1, 28 * 28))
# [b, 784] => [b, 10]
out = network(x)
# [b, 10] => [b]
pred = tf.argmax(out, axis=1)
pred = tf.cast(pred, dtype=tf.int32)
# bool type
correct = tf.equal(pred, y)
# bool tensor => int tensor => numpy
total_correct += tf.reduce_sum(tf.cast(correct,
dtype=tf.int32)).numpy()
total += x.shape[0]
print(step, 'Evaluate Acc:', total_correct / total)
# print(x.shape)
val_images = x[:25]
val_images = tf.reshape(val_images, [-1, 28, 28, 1])
with summary_writer.as_default():
tf.summary.scalar('test-acc',
float(total_correct / total),
step=step)
tf.summary.image("val-onebyone-images:",
val_images,
max_outputs=25,
step=step)
val_images = tf.reshape(val_images, [-1, 28, 28])
figure = image_grid(val_images)
tf.summary.image('val-images:', plot_to_image(figure), step=step)
datasets: (60000, 28, 28) (60000,) 0 255
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_5 (Dense) multiple 200960
_________________________________________________________________
dense_6 (Dense) multiple 32896
_________________________________________________________________
dense_7 (Dense) multiple 8256
_________________________________________________________________
dense_8 (Dense) multiple 2080
_________________________________________________________________
dense_9 (Dense) multiple 330
=================================================================
Total params: 244,522
Trainable params: 244,522
Non-trainable params: 0
_________________________________________________________________
0 loss: 2.3376832008361816
0 Evaluate Acc: 0.18008814102564102
100 loss: 0.48326703906059265
200 loss: 0.25227126479148865
300 loss: 0.1876775473356247
400 loss: 0.1666598916053772
500 loss: 0.1336817890405655
500 Evaluate Acc: 0.9542267628205128
600 loss: 0.12189087271690369
700 loss: 0.1326061487197876
800 loss: 0.19785025715827942
900 loss: 0.06632998585700989
1000 loss: 0.059026435017585754
1000 Evaluate Acc: 0.96875
1100 loss: 0.1200297400355339
1200 loss: 0.20464201271533966
1300 loss: 0.07950295507907867
1400 loss: 0.13028256595134735
1500 loss: 0.0644262284040451
1500 Evaluate Acc: 0.9657451923076923
1600 loss: 0.06169471889734268
1700 loss: 0.04833034425973892
1800 loss: 0.14102090895175934
1900 loss: 0.00526371318846941
2000 loss: 0.03505736589431763
2000 Evaluate Acc: 0.9735576923076923
2100 loss: 0.08948884159326553
2200 loss: 0.035213079303503036
2300 loss: 0.15530908107757568
2400 loss: 0.13484254479408264
2500 loss: 0.17365671694278717
2500 Evaluate Acc: 0.9727564102564102
2600 loss: 0.17384998500347137
2700 loss: 0.06045734882354736
2800 loss: 0.13712377846240997
2900 loss: 0.08388100564479828
3000 loss: 0.05825091525912285
3000 Evaluate Acc: 0.9657451923076923
3100 loss: 0.08653448522090912
3200 loss: 0.06315462291240692
3300 loss: 0.05536603182554245
3400 loss: 0.2064306139945984
3500 loss: 0.043574199080467224
3500 Evaluate Acc: 0.96875
3600 loss: 0.0456567145884037
3700 loss: 0.08570165187120438
3800 loss: 0.021522987633943558
3900 loss: 0.05123775079846382
4000 loss: 0.14489373564720154
4000 Evaluate Acc: 0.9722556089743589
4100 loss: 0.08733823150396347
4200 loss: 0.04572174698114395
4300 loss: 0.06757005304098129
4400 loss: 0.018376709893345833
4500 loss: 0.024091437458992004
4500 Evaluate Acc: 0.9701522435897436
4600 loss: 0.10814780741930008
标签:value closed dimens lse ini tip save spl show
原文地址:https://www.cnblogs.com/nickchen121/p/10921820.html