-
Notifications
You must be signed in to change notification settings - Fork 39
Home
Paweł Redzyński edited this page Nov 25, 2020
·
6 revisions
Showcase:
Install dvc from dvclive branch: https://github.com/iterative/dvc/tree/dvclive
Install dvclive.
Artificial example:
from dvclive import dvclive
import time
dvclive.init("logs", summarize=True)
def metric(i):
return 1 - 1/(1+i)
def loss(i):
return 1-(metric(i))
for i in range(100):
dvclive.log("metric", metric(i))
dvclive.log("loss", loss(i))
dvclive.next_step()
time.sleep(3)A bit more real use case:
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from dvclive import dvclive
from dvclive.keras import DvcLiveCallback
num_classes = 10
input_shape = (28, 28, 1)
def get_data():
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
return (x_train, y_train), (x_test, y_test)
def get_model():
model= keras.Sequential(
[
keras.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax"),
])
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
return model
if __name__ == "__main__":
model =get_model()
(x_train, y_train), (_, _) = get_data()
dvclive.init("logs", summarize=True)
model.fit(x_train, y_train, batch_size=128, epochs=10, validation_split=0.1, callbacks=DvcLiveCallback())Upon running, look for logs.html in your directory, open it and keep refreshing.
Note, that only thing that we did in the latter example was calling dvclive.init and providing callback for Keras.