Robust machine learning on streaming data using Kafka and Tensorflow-IO

View on TensorFlow.org Run in Google Colab View source on GitHub Download notebook

Overview

This tutorial focuses on streaming data from a Kafka cluster into a tf.data.Dataset which is then used in conjunction with tf.keras for training and inference.

Kafka is primarily a distributed event-streaming platform which provides scalable and fault-tolerant streaming data across data pipelines. It is an essential technical component of a plethora of major enterprises where mission-critical data delivery is a primary requirement.

Setup

Install the required tensorflow-io and kafka packages

pip install tensorflow-io
pip install kafka-python

Import packages

import os
from datetime import datetime
import time
import threading
import json
from kafka import KafkaProducer
from kafka.errors import KafkaError
from sklearn.model_selection import train_test_split
import pandas as pd
import tensorflow as tf
import tensorflow_io as tfio

Validate tf and tfio imports

print("tensorflow-io version: {}".format(tfio.__version__))
print("tensorflow version: {}".format(tf.__version__))
tensorflow-io version: 0.23.1
tensorflow version: 2.8.0-rc0

Download and setup Kafka and Zookeeper instances

For demo purposes, the following instances are setup locally:

  • Kafka (Brokers: 127.0.0.1:9092)
  • Zookeeper (Node: 127.0.0.1:2181)
curl -sSOL https://downloads.apache.org/kafka/2.7.2/kafka_2.13-2.7.2.tgz
tar -xzf kafka_2.13-2.7.2.tgz

Using the default configurations (provided by Apache Kafka) for spinning up the instances.

./kafka_2.13-2.7.2/bin/zookeeper-server-start.sh -daemon ./kafka_2.13-2.7.2/config/zookeeper.properties
./kafka_2.13-2.7.2/bin/kafka-server-start.sh -daemon ./kafka_2.13-2.7.2/config/server.properties
echo "Waiting for 10 secs until kafka and zookeeper services are up and running"
sleep 10
Waiting for 10 secs until kafka and zookeeper services are up and running

Once the instances are started as daemon processes, grep for kafka in the processes list. The two java processes correspond to zookeeper and the kafka instances.

ps -ef | grep kafka
kbuilder 27856 20044  4 20:28 ?        00:00:00 python /tmpfs/src/gfile/executor.py --input_notebook=/tmpfs/src/temp/docs/tutorials/kafka.ipynb --timeout=15000
kbuilder 28271     1 16 20:28 ?        00:00:01 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true -Xlog:gc*:file=/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../logs/zookeeper-gc.log:time,tags:filecount=10,filesize=100M -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../logs -Dlog4j.configuration=file:./kafka_2.13-2.7.2/bin/../config/log4j.properties -cp /tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/activation-1.1.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/aopalliance-repackaged-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/argparse4j-0.7.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/audience-annotations-0.5.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/commons-cli-1.4.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/commons-lang3-3.8.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-api-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-basic-auth-extension-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-file-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-json-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-mirror-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-mirror-client-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-runtime-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-transforms-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/hk2-api-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/hk2-locator-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/hk2-utils-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-annotations-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-core-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-databind-2.10.5.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-dataformat-csv-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-datatype-jdk8-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-jaxrs-base-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-jaxrs-json-provider-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-module-jaxb-annotations-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-module-paranamer-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-module-scala_2.13-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.activation-api-1.2.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.annotation-api-1.3.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.inject-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.validation-api-2.0.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.ws.rs-api-2.1.6.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.xml.bind-api-2.3.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javassist-3.25.0-GA.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javassist-3.26.0-GA.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javax.servlet-api-3.1.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javax.ws.rs-api-2.1.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jaxb-api-2.3.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-client-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-common-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-container-servlet-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-container-servlet-core-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-hk2-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-server-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-client-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-continuation-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-http-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-io-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-security-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-server-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-servlet-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-servlets-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-util-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-util-ajax-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jopt-simple-5.0.4.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-clients-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-log4j-appender-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-raft-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-examples-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-scala_2.13-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-test-utils-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-tools-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka_2.13-2.7.2-sources.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka_2.13-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/log4j-1.2.17.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/lz4-java-1.7.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/maven-artifact-3.8.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/metrics-core-2.2.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-buffer-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-codec-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-common-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-handler-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-resolver-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-transport-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-transport-native-epoll-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-transport-native-unix-common-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/osgi-resource-locator-1.0.3.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/paranamer-2.8.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/plexus-utils-3.2.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/reflections-0.9.12.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/rocksdbjni-5.18.4.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-collection-compat_2.13-2.2.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-java8-compat_2.13-0.9.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-library-2.13.3.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-logging_2.13-3.9.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-reflect-2.13.3.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/slf4j-api-1.7.30.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/slf4j-log4j12-1.7.30.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/snappy-java-1.1.7.7.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/zookeeper-3.5.9.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/zookeeper-jute-3.5.9.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/zstd-jni-1.4.5-6.jar org.apache.zookeeper.server.quorum.QuorumPeerMain ./kafka_2.13-2.7.2/config/zookeeper.properties
kbuilder 28635     1 57 20:28 ?        00:00:05 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true -Xlog:gc*:file=/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../logs/kafkaServer-gc.log:time,tags:filecount=10,filesize=100M -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../logs -Dlog4j.configuration=file:./kafka_2.13-2.7.2/bin/../config/log4j.properties -cp /tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/activation-1.1.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/aopalliance-repackaged-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/argparse4j-0.7.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/audience-annotations-0.5.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/commons-cli-1.4.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/commons-lang3-3.8.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-api-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-basic-auth-extension-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-file-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-json-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-mirror-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-mirror-client-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-runtime-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/connect-transforms-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/hk2-api-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/hk2-locator-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/hk2-utils-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-annotations-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-core-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-databind-2.10.5.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-dataformat-csv-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-datatype-jdk8-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-jaxrs-base-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-jaxrs-json-provider-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-module-jaxb-annotations-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-module-paranamer-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jackson-module-scala_2.13-2.10.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.activation-api-1.2.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.annotation-api-1.3.5.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.inject-2.6.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.validation-api-2.0.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.ws.rs-api-2.1.6.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jakarta.xml.bind-api-2.3.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javassist-3.25.0-GA.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javassist-3.26.0-GA.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javax.servlet-api-3.1.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/javax.ws.rs-api-2.1.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jaxb-api-2.3.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-client-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-common-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-container-servlet-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-container-servlet-core-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-hk2-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jersey-server-2.34.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-client-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-continuation-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-http-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-io-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-security-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-server-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-servlet-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-servlets-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-util-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jetty-util-ajax-9.4.43.v20210629.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/jopt-simple-5.0.4.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-clients-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-log4j-appender-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-raft-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-examples-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-scala_2.13-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-streams-test-utils-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka-tools-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka_2.13-2.7.2-sources.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/kafka_2.13-2.7.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/log4j-1.2.17.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/lz4-java-1.7.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/maven-artifact-3.8.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/metrics-core-2.2.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-buffer-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-codec-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-common-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-handler-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-resolver-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-transport-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-transport-native-epoll-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/netty-transport-native-unix-common-4.1.59.Final.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/osgi-resource-locator-1.0.3.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/paranamer-2.8.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/plexus-utils-3.2.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/reflections-0.9.12.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/rocksdbjni-5.18.4.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-collection-compat_2.13-2.2.0.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-java8-compat_2.13-0.9.1.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-library-2.13.3.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-logging_2.13-3.9.2.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/scala-reflect-2.13.3.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/slf4j-api-1.7.30.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/slf4j-log4j12-1.7.30.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/snappy-java-1.1.7.7.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/zookeeper-3.5.9.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/zookeeper-jute-3.5.9.jar:/tmpfs/src/temp/docs/tutorials/kafka_2.13-2.7.2/bin/../libs/zstd-jni-1.4.5-6.jar kafka.Kafka ./kafka_2.13-2.7.2/config/server.properties
kbuilder 28821 27860  0 20:28 pts/0    00:00:00 /bin/bash -c ps -ef | grep kafka
kbuilder 28823 28821  0 20:28 pts/0    00:00:00 grep kafka

Create the kafka topics with the following specs:

  • susy-train: partitions=1, replication-factor=1
  • susy-test: partitions=2, replication-factor=1
./kafka_2.13-2.7.2/bin/kafka-topics.sh --create --bootstrap-server 127.0.0.1:9092 --replication-factor 1 --partitions 1 --topic susy-train
./kafka_2.13-2.7.2/bin/kafka-topics.sh --create --bootstrap-server 127.0.0.1:9092 --replication-factor 1 --partitions 2 --topic susy-test
Created topic susy-train.
Created topic susy-test.

Describe the topic for details on the configuration

./kafka_2.13-2.7.2/bin/kafka-topics.sh --describe --bootstrap-server 127.0.0.1:9092 --topic susy-train
./kafka_2.13-2.7.2/bin/kafka-topics.sh --describe --bootstrap-server 127.0.0.1:9092 --topic susy-test
Topic: susy-train PartitionCount: 1 ReplicationFactor: 1  Configs: segment.bytes=1073741824
    Topic: susy-train Partition: 0  Leader: 0 Replicas: 0   Isr: 0
Topic: susy-test  PartitionCount: 2 ReplicationFactor: 1  Configs: segment.bytes=1073741824
    Topic: susy-test  Partition: 0  Leader: 0 Replicas: 0   Isr: 0
    Topic: susy-test  Partition: 1  Leader: 0 Replicas: 0   Isr: 0

The replication factor 1 indicates that the data is not being replicated. This is due to the presence of a single broker in our kafka setup. In production systems, the number of bootstrap servers can be in the range of 100's of nodes. That is where the fault-tolerance using replication comes into picture.

Please refer to the docs for more details.

SUSY Dataset

Kafka being an event streaming platform, enables data from various sources to be written into it. For instance:

  • Web traffic logs
  • Astronomical measurements
  • IoT sensor data
  • Product reviews and many more.

For the purpose of this tutorial, lets download the SUSY dataset and feed the data into kafka manually. The goal of this classification problem is to distinguish between a signal process which produces supersymmetric particles and a background process which does not.

curl -sSOL https://archive.ics.uci.edu/ml/machine-learning-databases/00279/SUSY.csv.gz

Explore the dataset

The first column is the class label (1 for signal, 0 for background), followed by the 18 features (8 low-level features then 10 high-level features). The first 8 features are kinematic properties measured by the particle detectors in the accelerator. The last 10 features are functions of the first 8 features. These are high-level features derived by physicists to help discriminate between the two classes.

COLUMNS = [
          #  labels
           'class',
          #  low-level features
           'lepton_1_pT',
           'lepton_1_eta',
           'lepton_1_phi',
           'lepton_2_pT',
           'lepton_2_eta',
           'lepton_2_phi',
           'missing_energy_magnitude',
           'missing_energy_phi',
          #  high-level derived features
           'MET_rel',
           'axial_MET',
           'M_R',
           'M_TR_2',
           'R',
           'MT2',
           'S_R',
           'M_Delta_R',
           'dPhi_r_b',
           'cos(theta_r1)'
           ]

The entire dataset consists of 5 million rows. However, for the purpose of this tutorial, let's consider only a fraction of the dataset (100,000 rows) so that less time is spent on the moving the data and more time on understanding the functionality of the api.

susy_iterator = pd.read_csv('SUSY.csv.gz', header=None, names=COLUMNS, chunksize=100000)
susy_df = next(susy_iterator)
susy_df.head()
# Number of datapoints and columns
len(susy_df), len(susy_df.columns)
(100000, 19)
# Number of datapoints belonging to each class (0: background noise, 1: signal)
len(susy_df[susy_df["class"]==0]), len(susy_df[susy_df["class"]==1])
(54025, 45975)

Split the dataset

train_df, test_df = train_test_split(susy_df, test_size=0.4, shuffle=True)
print("Number of training samples: ",len(train_df))
print("Number of testing sample: ",len(test_df))

x_train_df = train_df.drop(["class"], axis=1)
y_train_df = train_df["class"]

x_test_df = test_df.drop(["class"], axis=1)
y_test_df = test_df["class"]

# The labels are set as the kafka message keys so as to store data
# in multiple-partitions. Thus, enabling efficient data retrieval
# using the consumer groups.
x_train = list(filter(None, x_train_df.to_csv(index=False).split("\n")[1:]))
y_train = list(filter(None, y_train_df.to_csv(index=False).split("\n")[1:]))

x_test = list(filter(None, x_test_df.to_csv(index=False).split("\n")[1:]))
y_test = list(filter(None, y_test_df.to_csv(index=False).split("\n")[1:]))
Number of training samples:  60000
Number of testing sample:  40000
NUM_COLUMNS = len(x_train_df.columns)
len(x_train), len(y_train), len(x_test), len(y_test)
(60000, 60000, 40000, 40000)

Store the train and test data in kafka

Storing the data in kafka simulates an environment for continuous remote data retrieval for training and inference purposes.

def error_callback(exc):
    raise Exception('Error while sendig data to kafka: {0}'.format(str(exc)))

def write_to_kafka(topic_name, items):
  count=0
  producer = KafkaProducer(bootstrap_servers=['127.0.0.1:9092'])
  for message, key in items:
    producer.send(topic_name, key=key.encode('utf-8'), value=message.encode('utf-8')).add_errback(error_callback)
    count+=1
  producer.flush()
  print("Wrote {0} messages into topic: {1}".format(count, topic_name))

write_to_kafka("susy-train", zip(x_train, y_train))
write_to_kafka("susy-test", zip(x_test, y_test))
Wrote 60000 messages into topic: susy-train
Wrote 40000 messages into topic: susy-test

Define the tfio train dataset

The IODataset class is utilized for streaming data from kafka into tensorflow. The class inherits from tf.data.Dataset and thus has all the useful functionalities of tf.data.Dataset out of the box.

def decode_kafka_item(item):
  message = tf.io.decode_csv(item.message, [[0.0] for i in range(NUM_COLUMNS)])
  key = tf.strings.to_number(item.key)
  return (message, key)

BATCH_SIZE=64
SHUFFLE_BUFFER_SIZE=64
train_ds = tfio.IODataset.from_kafka('susy-train', partition=0, offset=0)
train_ds = train_ds.shuffle(buffer_size=SHUFFLE_BUFFER_SIZE)
train_ds = train_ds.map(decode_kafka_item)
train_ds = train_ds.batch(BATCH_SIZE)
2022-01-07 20:29:21.602817: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

Build and train the model

# Set the parameters

OPTIMIZER="adam"
LOSS=tf.keras.losses.BinaryCrossentropy(from_logits=True)
METRICS=['accuracy']
EPOCHS=10
# design/build the model
model = tf.keras.Sequential([
  tf.keras.layers.Input(shape=(NUM_COLUMNS,)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(256, activation='relu'),
  tf.keras.layers.Dropout(0.4),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.4),
  tf.keras.layers.Dense(1, activation='sigmoid')
])

print(model.summary())
Model: "sequential"
_________________________________________________________________
Layer (type)                Output Shape              Param #
=================================================================
dense (Dense)               (None, 128)               2432

dropout (Dropout)           (None, 128)               0

dense_1 (Dense)             (None, 256)               33024

dropout_1 (Dropout)         (None, 256)               0

dense_2 (Dense)             (None, 128)               32896

dropout_2 (Dropout)         (None, 128)               0

dense_3 (Dense)             (None, 1)                 129

=================================================================
Total params: 68,481
Trainable params: 68,481
Non-trainable params: 0
_________________________________________________________________
None
# compile the model
model.compile(optimizer=OPTIMIZER, loss=LOSS, metrics=METRICS)
# fit the model
model.fit(train_ds, epochs=EPOCHS)
Epoch 1/10
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/util/dispatch.py:1082: UserWarning: "`binary_crossentropy` received `from_logits=True`, but the `output` argument was produced by a sigmoid or softmax activation and thus does not represent logits. Was this intended?"
  return dispatch_target(*args, **kwargs)
1/Unknown - 1s 875ms/step - loss: 0.7451 - accuracy: 0.4688
16/Unknown - 1s 32ms/step - loss: 0.6742 - accuracy: 0.5586
32/Unknown - 2s 33ms/step - loss: 0.6469 - accuracy: 0.6035
48/Unknown - 2s 34ms/step - loss: 0.6246 - accuracy: 0.6364
64/Unknown - 3s 34ms/step - loss: 0.5936 - accuracy: 0.6655
80/Unknown - 4s 34ms/step - loss: 0.5817 - accuracy: 0.6783
96/Unknown - 4s 34ms/step - loss: 0.5709 - accuracy: 0.6893
112/Unknown - 5s 34ms/step - loss: 0.5598 - accuracy: 0.6988
128/Unknown - 5s 34ms/step - loss: 0.5558 - accuracy: 0.7041
144/Unknown - 6s 34ms/step - loss: 0.5487 - accuracy: 0.7128
160/Unknown - 6s 34ms/step - loss: 0.5435 - accuracy: 0.7172
176/Unknown - 7s 34ms/step - loss: 0.5386 - accuracy: 0.7222
192/Unknown - 7s 34ms/step - loss: 0.5341 - accuracy: 0.7252
208/Unknown - 8s 34ms/step - loss: 0.5294 - accuracy: 0.7298
224/Unknown - 8s 34ms/step - loss: 0.5263 - accuracy: 0.7327
240/Unknown - 9s 34ms/step - loss: 0.5228 - accuracy: 0.7364
256/Unknown - 9s 34ms/step - loss: 0.5189 - accuracy: 0.7393
272/Unknown - 10s 34ms/step - loss: 0.5150 - accuracy: 0.7424
288/Unknown - 10s 33ms/step - loss: 0.5130 - accuracy: 0.7443
304/Unknown - 11s 33ms/step - loss: 0.5110 - accuracy: 0.7456
320/Unknown - 12s 33ms/step - loss: 0.5084 - accuracy: 0.7477
336/Unknown - 12s 33ms/step - loss: 0.5077 - accuracy: 0.7487
352/Unknown - 13s 33ms/step - loss: 0.5054 - accuracy: 0.7507
368/Unknown - 13s 33ms/step - loss: 0.5036 - accuracy: 0.7518
384/Unknown - 14s 33ms/step - loss: 0.5025 - accuracy: 0.7533
400/Unknown - 14s 33ms/step - loss: 0.5010 - accuracy: 0.7544
416/Unknown - 15s 33ms/step - loss: 0.4993 - accuracy: 0.7553
432/Unknown - 15s 33ms/step - loss: 0.4990 - accuracy: 0.7560
448/Unknown - 16s 33ms/step - loss: 0.4981 - accuracy: 0.7571
464/Unknown - 16s 33ms/step - loss: 0.4973 - accuracy: 0.7577
480/Unknown - 17s 33ms/step - loss: 0.4965 - accuracy: 0.7582
496/Unknown - 17s 33ms/step - loss: 0.4956 - accuracy: 0.7589
512/Unknown - 18s 33ms/step - loss: 0.4951 - accuracy: 0.7596
528/Unknown - 18s 33ms/step - loss: 0.4944 - accuracy: 0.7601
544/Unknown - 19s 33ms/step - loss: 0.4936 - accuracy: 0.7608
560/Unknown - 19s 33ms/step - loss: 0.4918 - accuracy: 0.7620
576/Unknown - 20s 33ms/step - loss: 0.4907 - accuracy: 0.7628
592/Unknown - 20s 33ms/step - loss: 0.4897 - accuracy: 0.7635
608/Unknown - 21s 33ms/step - loss: 0.4895 - accuracy: 0.7638
624/Unknown - 21s 33ms/step - loss: 0.4891 - accuracy: 0.7642
640/Unknown - 22s 33ms/step - loss: 0.4888 - accuracy: 0.7643
656/Unknown - 22s 33ms/step - loss: 0.4886 - accuracy: 0.7644
672/Unknown - 23s 33ms/step - loss: 0.4889 - accuracy: 0.7640
688/Unknown - 23s 33ms/step - loss: 0.4877 - accuracy: 0.7647
704/Unknown - 24s 33ms/step - loss: 0.4867 - accuracy: 0.7655
720/Unknown - 24s 33ms/step - loss: 0.4867 - accuracy: 0.7656
736/Unknown - 25s 33ms/step - loss: 0.4863 - accuracy: 0.7659
752/Unknown - 26s 33ms/step - loss: 0.4856 - accuracy: 0.7664
768/Unknown - 26s 33ms/step - loss: 0.4855 - accuracy: 0.7668
784/Unknown - 27s 33ms/step - loss: 0.4849 - accuracy: 0.7671
800/Unknown - 27s 33ms/step - loss: 0.4846 - accuracy: 0.7673
816/Unknown - 28s 33ms/step - loss: 0.4847 - accuracy: 0.7674
832/Unknown - 28s 33ms/step - loss: 0.4845 - accuracy: 0.7675
848/Unknown - 29s 33ms/step - loss: 0.4839 - accuracy: 0.7678
864/Unknown - 29s 33ms/step - loss: 0.4833 - accuracy: 0.7680
880/Unknown - 30s 33ms/step - loss: 0.4830 - accuracy: 0.7683
896/Unknown - 30s 33ms/step - loss: 0.4828 - accuracy: 0.7685
912/Unknown - 31s 33ms/step - loss: 0.4822 - accuracy: 0.7689
928/Unknown - 31s 33ms/step - loss: 0.4816 - accuracy: 0.7693
938/938 [==============================] - 31s 33ms/step - loss: 0.4817 - accuracy: 0.7691
Epoch 2/10
1/938 [..............................] - ETA: 2:45 - loss: 0.5905 - accuracy: 0.6719
16/938 [..............................] - ETA: 33s - loss: 0.4763 - accuracy: 0.7627
32/938 [>.............................] - ETA: 31s - loss: 0.4660 - accuracy: 0.7817
48/938 [>.............................] - ETA: 30s - loss: 0.4733 - accuracy: 0.7822
64/938 [=>............................] - ETA: 29s - loss: 0.4647 - accuracy: 0.7876
80/938 [=>............................] - ETA: 29s - loss: 0.4702 - accuracy: 0.7836
96/938 [==>...........................] - ETA: 28s - loss: 0.4663 - accuracy: 0.7847
112/938 [==>...........................] - ETA: 27s - loss: 0.4629 - accuracy: 0.7857
128/938 [===>..........................] - ETA: 27s - loss: 0.4669 - accuracy: 0.7831
144/938 [===>..........................] - ETA: 26s - loss: 0.4632 - accuracy: 0.7848
160/938 [====>.........................] - ETA: 26s - loss: 0.4637 - accuracy: 0.7841
176/938 [====>.........................] - ETA: 25s - loss: 0.4612 - accuracy: 0.7832
192/938 [=====>........................] - ETA: 24s - loss: 0.4604 - accuracy: 0.7835
208/938 [=====>........................] - ETA: 24s - loss: 0.4594 - accuracy: 0.7849
224/938 [======>.......................] - ETA: 23s - loss: 0.4588 - accuracy: 0.7852
240/938 [======>.......................] - ETA: 23s - loss: 0.4581 - accuracy: 0.7852
256/938 [=======>......................] - ETA: 22s - loss: 0.4564 - accuracy: 0.7861
272/938 [=======>......................] - ETA: 22s - loss: 0.4549 - accuracy: 0.7875
288/938 [========>.....................] - ETA: 21s - loss: 0.4555 - accuracy: 0.7871
304/938 [========>.....................] - ETA: 21s - loss: 0.4552 - accuracy: 0.7877
320/938 [=========>....................] - ETA: 20s - loss: 0.4549 - accuracy: 0.7876
336/938 [=========>....................] - ETA: 20s - loss: 0.4550 - accuracy: 0.7877
352/938 [==========>...................] - ETA: 19s - loss: 0.4546 - accuracy: 0.7877
368/938 [==========>...................] - ETA: 18s - loss: 0.4550 - accuracy: 0.7874
384/938 [===========>..................] - ETA: 18s - loss: 0.4551 - accuracy: 0.7877
400/938 [===========>..................] - ETA: 17s - loss: 0.4549 - accuracy: 0.7878
416/938 [============>.................] - ETA: 17s - loss: 0.4548 - accuracy: 0.7880
432/938 [============>.................] - ETA: 16s - loss: 0.4556 - accuracy: 0.7877
448/938 [=============>................] - ETA: 16s - loss: 0.4557 - accuracy: 0.7878
464/938 [=============>................] - ETA: 15s - loss: 0.4551 - accuracy: 0.7879
480/938 [==============>...............] - ETA: 15s - loss: 0.4554 - accuracy: 0.7876
496/938 [==============>...............] - ETA: 14s - loss: 0.4556 - accuracy: 0.7876
512/938 [===============>..............] - ETA: 14s - loss: 0.4559 - accuracy: 0.7873
528/938 [===============>..............] - ETA: 13s - loss: 0.4558 - accuracy: 0.7874
544/938 [================>.............] - ETA: 12s - loss: 0.4558 - accuracy: 0.7875
560/938 [================>.............] - ETA: 12s - loss: 0.4546 - accuracy: 0.7883
576/938 [=================>............] - ETA: 11s - loss: 0.4542 - accuracy: 0.7885
592/938 [=================>............] - ETA: 11s - loss: 0.4540 - accuracy: 0.7886
608/938 [==================>...........] - ETA: 10s - loss: 0.4544 - accuracy: 0.7884
624/938 [==================>...........] - ETA: 10s - loss: 0.4545 - accuracy: 0.7883
640/938 [===================>..........] - ETA: 9s - loss: 0.4546 - accuracy: 0.7880
656/938 [===================>..........] - ETA: 9s - loss: 0.4548 - accuracy: 0.7878
672/938 [====================>.........] - ETA: 8s - loss: 0.4554 - accuracy: 0.7869
688/938 [=====================>........] - ETA: 8s - loss: 0.4547 - accuracy: 0.7874
704/938 [=====================>........] - ETA: 7s - loss: 0.4544 - accuracy: 0.7874
720/938 [======================>.......] - ETA: 7s - loss: 0.4551 - accuracy: 0.7870
736/938 [======================>.......] - ETA: 6s - loss: 0.4553 - accuracy: 0.7869
752/938 [=======================>......] - ETA: 6s - loss: 0.4547 - accuracy: 0.7874
768/938 [=======================>......] - ETA: 5s - loss: 0.4550 - accuracy: 0.7874
784/938 [========================>.....] - ETA: 5s - loss: 0.4549 - accuracy: 0.7875
800/938 [========================>.....] - ETA: 4s - loss: 0.4550 - accuracy: 0.7876
816/938 [=========================>....] - ETA: 3s - loss: 0.4555 - accuracy: 0.7872
832/938 [=========================>....] - ETA: 3s - loss: 0.4555 - accuracy: 0.7870
848/938 [==========================>...] - ETA: 2s - loss: 0.4557 - accuracy: 0.7870
864/938 [==========================>...] - ETA: 2s - loss: 0.4556 - accuracy: 0.7871
880/938 [===========================>..] - ETA: 1s - loss: 0.4552 - accuracy: 0.7873
896/938 [===========================>..] - ETA: 1s - loss: 0.4553 - accuracy: 0.7873
912/938 [============================>.] - ETA: 0s - loss: 0.4550 - accuracy: 0.7876
928/938 [============================>.] - ETA: 0s - loss: 0.4547 - accuracy: 0.7877
938/938 [==============================] - 30s 32ms/step - loss: 0.4550 - accuracy: 0.7875
Epoch 3/10
1/938 [..............................] - ETA: 7:05 - loss: 0.5060 - accuracy: 0.7344
16/938 [..............................] - ETA: 32s - loss: 0.4667 - accuracy: 0.7725
32/938 [>.............................] - ETA: 31s - loss: 0.4581 - accuracy: 0.7803
48/938 [>.............................] - ETA: 30s - loss: 0.4691 - accuracy: 0.7786
64/938 [=>............................] - ETA: 29s - loss: 0.4593 - accuracy: 0.7849
80/938 [=>............................] - ETA: 29s - loss: 0.4639 - accuracy: 0.7822
96/938 [==>...........................] - ETA: 28s - loss: 0.4597 - accuracy: 0.7840
112/938 [==>...........................] - ETA: 27s - loss: 0.4567 - accuracy: 0.7871
128/938 [===>..........................] - ETA: 27s - loss: 0.4600 - accuracy: 0.7844
144/938 [===>..........................] - ETA: 26s - loss: 0.4565 - accuracy: 0.7862
160/938 [====>.........................] - ETA: 26s - loss: 0.4574 - accuracy: 0.7858
176/938 [====>.........................] - ETA: 25s - loss: 0.4556 - accuracy: 0.7876
192/938 [=====>........................] - ETA: 24s - loss: 0.4554 - accuracy: 0.7873
208/938 [=====>........................] - ETA: 24s - loss: 0.4535 - accuracy: 0.7885
224/938 [======>.......................] - ETA: 23s - loss: 0.4527 - accuracy: 0.7896
240/938 [======>.......................] - ETA: 23s - loss: 0.4517 - accuracy: 0.7905
256/938 [=======>......................] - ETA: 22s - loss: 0.4503 - accuracy: 0.7910
272/938 [=======>......................] - ETA: 22s - loss: 0.4490 - accuracy: 0.7919
288/938 [========>.....................] - ETA: 21s - loss: 0.4498 - accuracy: 0.7920
304/938 [========>.....................] - ETA: 21s - loss: 0.4496 - accuracy: 0.7916
320/938 [=========>....................] - ETA: 20s - loss: 0.4495 - accuracy: 0.7915
336/938 [=========>....................] - ETA: 19s - loss: 0.4502 - accuracy: 0.7916
352/938 [==========>...................] - ETA: 19s - loss: 0.4502 - accuracy: 0.7910
368/938 [==========>...................] - ETA: 18s - loss: 0.4503 - accuracy: 0.7907
384/938 [===========>..................] - ETA: 18s - loss: 0.4500 - accuracy: 0.7912
400/938 [===========>..................] - ETA: 17s - loss: 0.4501 - accuracy: 0.7916
416/938 [============>.................] - ETA: 17s - loss: 0.4495 - accuracy: 0.7914
432/938 [============>.................] - ETA: 16s - loss: 0.4504 - accuracy: 0.7913
448/938 [=============>................] - ETA: 16s - loss: 0.4501 - accuracy: 0.7918
464/938 [=============>................] - ETA: 15s - loss: 0.4502 - accuracy: 0.7918
480/938 [==============>...............] - ETA: 15s - loss: 0.4503 - accuracy: 0.7920
496/938 [==============>...............] - ETA: 14s - loss: 0.4497 - accuracy: 0.7919
512/938 [===============>..............] - ETA: 14s - loss: 0.4505 - accuracy: 0.7914
528/938 [===============>..............] - ETA: 13s - loss: 0.4504 - accuracy: 0.7916
544/938 [================>.............] - ETA: 12s - loss: 0.4502 - accuracy: 0.7918
560/938 [================>.............] - ETA: 12s - loss: 0.4491 - accuracy: 0.7926
576/938 [=================>............] - ETA: 11s - loss: 0.4492 - accuracy: 0.7925
592/938 [=================>............] - ETA: 11s - loss: 0.4489 - accuracy: 0.7927
608/938 [==================>...........] - ETA: 10s - loss: 0.4493 - accuracy: 0.7926
624/938 [==================>...........] - ETA: 10s - loss: 0.4495 - accuracy: 0.7926
640/938 [===================>..........] - ETA: 9s - loss: 0.4498 - accuracy: 0.7923
656/938 [===================>..........] - ETA: 9s - loss: 0.4500 - accuracy: 0.7920
672/938 [====================>.........] - ETA: 8s - loss: 0.4507 - accuracy: 0.7912
688/938 [=====================>........] - ETA: 8s - loss: 0.4501 - accuracy: 0.7916
704/938 [=====================>........] - ETA: 7s - loss: 0.4498 - accuracy: 0.7919
720/938 [======================>.......] - ETA: 7s - loss: 0.4504 - accuracy: 0.7916
736/938 [======================>.......] - ETA: 6s - loss: 0.4507 - accuracy: 0.7915
752/938 [=======================>......] - ETA: 6s - loss: 0.4504 - accuracy: 0.7918
768/938 [=======================>......] - ETA: 5s - loss: 0.4505 - accuracy: 0.7917
784/938 [========================>.....] - ETA: 5s - loss: 0.4506 - accuracy: 0.7916
800/938 [========================>.....] - ETA: 4s - loss: 0.4508 - accuracy: 0.7915
816/938 [=========================>....] - ETA: 3s - loss: 0.4511 - accuracy: 0.7913
832/938 [=========================>....] - ETA: 3s - loss: 0.4513 - accuracy: 0.7913
848/938 [==========================>...] - ETA: 2s - loss: 0.4516 - accuracy: 0.7913
864/938 [==========================>...] - ETA: 2s - loss: 0.4514 - accuracy: 0.7915
880/938 [===========================>..] - ETA: 1s - loss: 0.4512 - accuracy: 0.7915
896/938 [===========================>..] - ETA: 1s - loss: 0.4514 - accuracy: 0.7914
912/938 [============================>.] - ETA: 0s - loss: 0.4510 - accuracy: 0.7916
928/938 [============================>.] - ETA: 0s - loss: 0.4507 - accuracy: 0.7916
938/938 [==============================] - 31s 32ms/step - loss: 0.4512 - accuracy: 0.7911
Epoch 4/10
1/938 [..............................] - ETA: 7:05 - loss: 0.5126 - accuracy: 0.6875
16/938 [..............................] - ETA: 32s - loss: 0.4622 - accuracy: 0.7754
32/938 [>.............................] - ETA: 31s - loss: 0.4543 - accuracy: 0.7891
48/938 [>.............................] - ETA: 30s - loss: 0.4650 - accuracy: 0.7852
64/938 [=>............................] - ETA: 29s - loss: 0.4558 - accuracy: 0.7883
80/938 [=>............................] - ETA: 29s - loss: 0.4589 - accuracy: 0.7842
96/938 [==>...........................] - ETA: 28s - loss: 0.4563 - accuracy: 0.7868
112/938 [==>...........................] - ETA: 27s - loss: 0.4542 - accuracy: 0.7892
128/938 [===>..........................] - ETA: 27s - loss: 0.4569 - accuracy: 0.7889
144/938 [===>..........................] - ETA: 26s - loss: 0.4538 - accuracy: 0.7909
160/938 [====>.........................] - ETA: 26s - loss: 0.4547 - accuracy: 0.7909
176/938 [====>.........................] - ETA: 25s - loss: 0.4519 - accuracy: 0.7931
192/938 [=====>........................] - ETA: 24s - loss: 0.4509 - accuracy: 0.7933
208/938 [=====>........................] - ETA: 24s - loss: 0.4492 - accuracy: 0.7942
224/938 [======>.......................] - ETA: 23s - loss: 0.4489 - accuracy: 0.7949
240/938 [======>.......................] - ETA: 23s - loss: 0.4483 - accuracy: 0.7956
256/938 [=======>......................] - ETA: 22s - loss: 0.4462 - accuracy: 0.7962
272/938 [=======>......................] - ETA: 22s - loss: 0.4454 - accuracy: 0.7967
288/938 [========>.....................] - ETA: 21s - loss: 0.4456 - accuracy: 0.7971
304/938 [========>.....................] - ETA: 21s - loss: 0.4459 - accuracy: 0.7965
320/938 [=========>....................] - ETA: 20s - loss: 0.4457 - accuracy: 0.7964
336/938 [=========>....................] - ETA: 19s - loss: 0.4461 - accuracy: 0.7965
352/938 [==========>...................] - ETA: 19s - loss: 0.4456 - accuracy: 0.7965
368/938 [==========>...................] - ETA: 18s - loss: 0.4461 - accuracy: 0.7958
384/938 [===========>..................] - ETA: 18s - loss: 0.4460 - accuracy: 0.7959
400/938 [===========>..................] - ETA: 17s - loss: 0.4463 - accuracy: 0.7955
416/938 [============>.................] - ETA: 17s - loss: 0.4459 - accuracy: 0.7960
432/938 [============>.................] - ETA: 16s - loss: 0.4470 - accuracy: 0.7954
448/938 [=============>................] - ETA: 16s - loss: 0.4471 - accuracy: 0.7960
464/938 [=============>................] - ETA: 15s - loss: 0.4468 - accuracy: 0.7959
480/938 [==============>...............] - ETA: 15s - loss: 0.4471 - accuracy: 0.7959
496/938 [==============>...............] - ETA: 14s - loss: 0.4467 - accuracy: 0.7960
512/938 [===============>..............] - ETA: 14s - loss: 0.4473 - accuracy: 0.7955
528/938 [===============>..............] - ETA: 13s - loss: 0.4472 - accuracy: 0.7955
544/938 [================>.............] - ETA: 12s - loss: 0.4475 - accuracy: 0.7952
560/938 [================>.............] - ETA: 12s - loss: 0.4465 - accuracy: 0.7956
576/938 [=================>............] - ETA: 11s - loss: 0.4462 - accuracy: 0.7956
592/938 [=================>............] - ETA: 11s - loss: 0.4459 - accuracy: 0.7960
608/938 [==================>...........] - ETA: 10s - loss: 0.4465 - accuracy: 0.7956
624/938 [==================>...........] - ETA: 10s - loss: 0.4467 - accuracy: 0.7954
640/938 [===================>..........] - ETA: 9s - loss: 0.4471 - accuracy: 0.7952
656/938 [===================>..........] - ETA: 9s - loss: 0.4473 - accuracy: 0.7952
672/938 [====================>.........] - ETA: 8s - loss: 0.4480 - accuracy: 0.7945
688/938 [=====================>........] - ETA: 8s - loss: 0.4475 - accuracy: 0.7947
704/938 [=====================>........] - ETA: 7s - loss: 0.4473 - accuracy: 0.7949
720/938 [======================>.......] - ETA: 7s - loss: 0.4479 - accuracy: 0.7947
736/938 [======================>.......] - ETA: 6s - loss: 0.4483 - accuracy: 0.7945
752/938 [=======================>......] - ETA: 6s - loss: 0.4479 - accuracy: 0.7948
768/938 [=======================>......] - ETA: 5s - loss: 0.4479 - accuracy: 0.7950
784/938 [========================>.....] - ETA: 5s - loss: 0.4480 - accuracy: 0.7950
800/938 [========================>.....] - ETA: 4s - loss: 0.4482 - accuracy: 0.7948
816/938 [=========================>....] - ETA: 3s - loss: 0.4484 - accuracy: 0.7947
832/938 [=========================>....] - ETA: 3s - loss: 0.4485 - accuracy: 0.7943
848/938 [==========================>...] - ETA: 2s - loss: 0.4488 - accuracy: 0.7941
864/938 [==========================>...] - ETA: 2s - loss: 0.4488 - accuracy: 0.7941
880/938 [===========================>..] - ETA: 1s - loss: 0.4485 - accuracy: 0.7942
896/938 [===========================>..] - ETA: 1s - loss: 0.4489 - accuracy: 0.7940
912/938 [============================>.] - ETA: 0s - loss: 0.4485 - accuracy: 0.7944
928/938 [============================>.] - ETA: 0s - loss: 0.4482 - accuracy: 0.7945
938/938 [==============================] - 31s 32ms/step - loss: 0.4487 - accuracy: 0.7940
Epoch 5/10
1/938 [..............................] - ETA: 7:06 - loss: 0.5000 - accuracy: 0.7656
16/938 [..............................] - ETA: 32s - loss: 0.4615 - accuracy: 0.7891
32/938 [>.............................] - ETA: 31s - loss: 0.4467 - accuracy: 0.7935
48/938 [>.............................] - ETA: 30s - loss: 0.4626 - accuracy: 0.7858
64/938 [=>............................] - ETA: 29s - loss: 0.4529 - accuracy: 0.7913
80/938 [=>............................] - ETA: 28s - loss: 0.4558 - accuracy: 0.7906
96/938 [==>...........................] - ETA: 28s - loss: 0.4540 - accuracy: 0.7910
112/938 [==>...........................] - ETA: 27s - loss: 0.4514 - accuracy: 0.7920
128/938 [===>..........................] - ETA: 27s - loss: 0.4555 - accuracy: 0.7891
144/938 [===>..........................] - ETA: 26s - loss: 0.4523 - accuracy: 0.7910
160/938 [====>.........................] - ETA: 26s - loss: 0.4524 - accuracy: 0.7910
176/938 [====>.........................] - ETA: 25s - loss: 0.4513 - accuracy: 0.7917
192/938 [=====>........................] - ETA: 24s - loss: 0.4501 - accuracy: 0.7926
208/938 [=====>........................] - ETA: 24s - loss: 0.4490 - accuracy: 0.7934
224/938 [======>.......................] - ETA: 23s - loss: 0.4478 - accuracy: 0.7941
240/938 [======>.......................] - ETA: 23s - loss: 0.4480 - accuracy: 0.7944
256/938 [=======>......................] - ETA: 22s - loss: 0.4461 - accuracy: 0.7952
272/938 [=======>......................] - ETA: 22s - loss: 0.4454 - accuracy: 0.7961
288/938 [========>.....................] - ETA: 21s - loss: 0.4453 - accuracy: 0.7964
304/938 [========>.....................] - ETA: 21s - loss: 0.4448 - accuracy: 0.7957
320/938 [=========>....................] - ETA: 20s - loss: 0.4441 - accuracy: 0.7958
336/938 [=========>....................] - ETA: 19s - loss: 0.4453 - accuracy: 0.7950
352/938 [==========>...................] - ETA: 19s - loss: 0.4452 - accuracy: 0.7945
368/938 [==========>...................] - ETA: 18s - loss: 0.4454 - accuracy: 0.7945
384/938 [===========>..................] - ETA: 18s - loss: 0.4455 - accuracy: 0.7947
400/938 [===========>..................] - ETA: 17s - loss: 0.4450 - accuracy: 0.7947
416/938 [============>.................] - ETA: 17s - loss: 0.4448 - accuracy: 0.7947
432/938 [============>.................] - ETA: 16s - loss: 0.4453 - accuracy: 0.7944
448/938 [=============>................] - ETA: 16s - loss: 0.4454 - accuracy: 0.7951
464/938 [=============>................] - ETA: 15s - loss: 0.4454 - accuracy: 0.7951
480/938 [==============>...............] - ETA: 15s - loss: 0.4454 - accuracy: 0.7952
496/938 [==============>...............] - ETA: 14s - loss: 0.4451 - accuracy: 0.7953
512/938 [===============>..............] - ETA: 14s - loss: 0.4457 - accuracy: 0.7948
528/938 [===============>..............] - ETA: 13s - loss: 0.4457 - accuracy: 0.7952
544/938 [================>.............] - ETA: 12s - loss: 0.4456 - accuracy: 0.7953
560/938 [================>.............] - ETA: 12s - loss: 0.4448 - accuracy: 0.7957
576/938 [=================>............] - ETA: 11s - loss: 0.4446 - accuracy: 0.7956
592/938 [=================>............] - ETA: 11s - loss: 0.4442 - accuracy: 0.7958
608/938 [==================>...........] - ETA: 10s - loss: 0.4448 - accuracy: 0.7957
624/938 [==================>...........] - ETA: 10s - loss: 0.4448 - accuracy: 0.7957
640/938 [===================>..........] - ETA: 9s - loss: 0.4452 - accuracy: 0.7954
656/938 [===================>..........] - ETA: 9s - loss: 0.4451 - accuracy: 0.7954
672/938 [====================>.........] - ETA: 8s - loss: 0.4459 - accuracy: 0.7945
688/938 [=====================>........] - ETA: 8s - loss: 0.4455 - accuracy: 0.7947
704/938 [=====================>........] - ETA: 7s - loss: 0.4453 - accuracy: 0.7951
720/938 [======================>.......] - ETA: 7s - loss: 0.4460 - accuracy: 0.7947
736/938 [======================>.......] - ETA: 6s - loss: 0.4464 - accuracy: 0.7945
752/938 [=======================>......] - ETA: 6s - loss: 0.4460 - accuracy: 0.7946
768/938 [=======================>......] - ETA: 5s - loss: 0.4460 - accuracy: 0.7945
784/938 [========================>.....] - ETA: 5s - loss: 0.4463 - accuracy: 0.7940
800/938 [========================>.....] - ETA: 4s - loss: 0.4464 - accuracy: 0.7940
816/938 [=========================>....] - ETA: 3s - loss: 0.4468 - accuracy: 0.7936
832/938 [=========================>....] - ETA: 3s - loss: 0.4469 - accuracy: 0.7934
848/938 [==========================>...] - ETA: 2s - loss: 0.4471 - accuracy: 0.7932
864/938 [==========================>...] - ETA: 2s - loss: 0.4468 - accuracy: 0.7936
880/938 [===========================>..] - ETA: 1s - loss: 0.4466 - accuracy: 0.7935
896/938 [===========================>..] - ETA: 1s - loss: 0.4468 - accuracy: 0.7934
912/938 [============================>.] - ETA: 0s - loss: 0.4463 - accuracy: 0.7937
928/938 [============================>.] - ETA: 0s - loss: 0.4464 - accuracy: 0.7937
938/938 [==============================] - 31s 32ms/step - loss: 0.4466 - accuracy: 0.7934
Epoch 6/10
1/938 [..............................] - ETA: 7:06 - loss: 0.5106 - accuracy: 0.7031
16/938 [..............................] - ETA: 32s - loss: 0.4582 - accuracy: 0.7822
32/938 [>.............................] - ETA: 31s - loss: 0.4492 - accuracy: 0.7915
48/938 [>.............................] - ETA: 30s - loss: 0.4640 - accuracy: 0.7816
64/938 [=>............................] - ETA: 29s - loss: 0.4526 - accuracy: 0.7891
80/938 [=>............................] - ETA: 29s - loss: 0.4571 - accuracy: 0.7867
96/938 [==>...........................] - ETA: 28s - loss: 0.4561 - accuracy: 0.7891
112/938 [==>...........................] - ETA: 27s - loss: 0.4520 - accuracy: 0.7906
128/938 [===>..........................] - ETA: 27s - loss: 0.4555 - accuracy: 0.7866
144/938 [===>..........................] - ETA: 26s - loss: 0.4520 - accuracy: 0.7895
160/938 [====>.........................] - ETA: 26s - loss: 0.4522 - accuracy: 0.7896
176/938 [====>.........................] - ETA: 25s - loss: 0.4500 - accuracy: 0.7911
192/938 [=====>........................] - ETA: 24s - loss: 0.4492 - accuracy: 0.7897
208/938 [=====>........................] - ETA: 24s - loss: 0.4476 - accuracy: 0.7909
224/938 [======>.......................] - ETA: 23s - loss: 0.4464 - accuracy: 0.7923
240/938 [======>.......................] - ETA: 23s - loss: 0.4466 - accuracy: 0.7939
256/938 [=======>......................] - ETA: 22s - loss: 0.4449 - accuracy: 0.7943
272/938 [=======>......................] - ETA: 22s - loss: 0.4441 - accuracy: 0.7949
288/938 [========>.....................] - ETA: 21s - loss: 0.4446 - accuracy: 0.7948
304/938 [========>.....................] - ETA: 21s - loss: 0.4442 - accuracy: 0.7948
320/938 [=========>....................] - ETA: 20s - loss: 0.4435 - accuracy: 0.7948
336/938 [=========>....................] - ETA: 19s - loss: 0.4443 - accuracy: 0.7944
352/938 [==========>...................] - ETA: 19s - loss: 0.4441 - accuracy: 0.7942
368/938 [==========>...................] - ETA: 18s - loss: 0.4445 - accuracy: 0.7942
384/938 [===========>..................] - ETA: 18s - loss: 0.4443 - accuracy: 0.7945
400/938 [===========>..................] - ETA: 17s - loss: 0.4449 - accuracy: 0.7942
416/938 [============>.................] - ETA: 17s - loss: 0.4442 - accuracy: 0.7944
432/938 [============>.................] - ETA: 16s - loss: 0.4446 - accuracy: 0.7942
448/938 [=============>................] - ETA: 16s - loss: 0.4450 - accuracy: 0.7943
464/938 [=============>................] - ETA: 15s - loss: 0.4454 - accuracy: 0.7938
480/938 [==============>...............] - ETA: 15s - loss: 0.4453 - accuracy: 0.7942
496/938 [==============>...............] - ETA: 14s - loss: 0.4450 - accuracy: 0.7946
512/938 [===============>..............] - ETA: 14s - loss: 0.4457 - accuracy: 0.7942
528/938 [===============>..............] - ETA: 13s - loss: 0.4455 - accuracy: 0.7942
544/938 [================>.............] - ETA: 12s - loss: 0.4455 - accuracy: 0.7943
560/938 [================>.............] - ETA: 12s - loss: 0.4444 - accuracy: 0.7951
576/938 [=================>............] - ETA: 11s - loss: 0.4438 - accuracy: 0.7953
592/938 [=================>............] - ETA: 11s - loss: 0.4440 - accuracy: 0.7955
608/938 [==================>...........] - ETA: 10s - loss: 0.4444 - accuracy: 0.7951
624/938 [==================>...........] - ETA: 10s - loss: 0.4442 - accuracy: 0.7952
640/938 [===================>..........] - ETA: 9s - loss: 0.4446 - accuracy: 0.7948
656/938 [===================>..........] - ETA: 9s - loss: 0.4446 - accuracy: 0.7945
672/938 [====================>.........] - ETA: 8s - loss: 0.4453 - accuracy: 0.7940
688/938 [=====================>........] - ETA: 8s - loss: 0.4448 - accuracy: 0.7941
704/938 [=====================>........] - ETA: 7s - loss: 0.4446 - accuracy: 0.7946
720/938 [======================>.......] - ETA: 7s - loss: 0.4453 - accuracy: 0.7940
736/938 [======================>.......] - ETA: 6s - loss: 0.4455 - accuracy: 0.7941
752/938 [=======================>......] - ETA: 6s - loss: 0.4453 - accuracy: 0.7941
768/938 [=======================>......] - ETA: 5s - loss: 0.4455 - accuracy: 0.7941
784/938 [========================>.....] - ETA: 5s - loss: 0.4456 - accuracy: 0.7938
800/938 [========================>.....] - ETA: 4s - loss: 0.4457 - accuracy: 0.7940
816/938 [=========================>....] - ETA: 3s - loss: 0.4461 - accuracy: 0.7936
832/938 [=========================>....] - ETA: 3s - loss: 0.4461 - accuracy: 0.7933
848/938 [==========================>...] - ETA: 2s - loss: 0.4463 - accuracy: 0.7931
864/938 [==========================>...] - ETA: 2s - loss: 0.4461 - accuracy: 0.7933
880/938 [===========================>..] - ETA: 1s - loss: 0.4458 - accuracy: 0.7935
896/938 [===========================>..] - ETA: 1s - loss: 0.4461 - accuracy: 0.7934
912/938 [============================>.] - ETA: 0s - loss: 0.4458 - accuracy: 0.7937
928/938 [============================>.] - ETA: 0s - loss: 0.4456 - accuracy: 0.7937
938/938 [==============================] - 31s 32ms/step - loss: 0.4459 - accuracy: 0.7933
Epoch 7/10
1/938 [..............................] - ETA: 7:05 - loss: 0.4353 - accuracy: 0.8281
16/938 [..............................] - ETA: 32s - loss: 0.4563 - accuracy: 0.7822
32/938 [>.............................] - ETA: 31s - loss: 0.4467 - accuracy: 0.7920
48/938 [>.............................] - ETA: 30s - loss: 0.4569 - accuracy: 0.7861
64/938 [=>............................] - ETA: 29s - loss: 0.4524 - accuracy: 0.7900
80/938 [=>............................] - ETA: 28s - loss: 0.4542 - accuracy: 0.7865
96/938 [==>...........................] - ETA: 28s - loss: 0.4513 - accuracy: 0.7884
112/938 [==>...........................] - ETA: 27s - loss: 0.4495 - accuracy: 0.7907
128/938 [===>..........................] - ETA: 27s - loss: 0.4532 - accuracy: 0.7885
144/938 [===>..........................] - ETA: 26s - loss: 0.4497 - accuracy: 0.7906
160/938 [====>.........................] - ETA: 26s - loss: 0.4510 - accuracy: 0.7899
176/938 [====>.........................] - ETA: 25s - loss: 0.4480 - accuracy: 0.7921
192/938 [=====>........................] - ETA: 24s - loss: 0.4476 - accuracy: 0.7921
208/938 [=====>........................] - ETA: 24s - loss: 0.4458 - accuracy: 0.7927
224/938 [======>.......................] - ETA: 23s - loss: 0.4451 - accuracy: 0.7935
240/938 [======>.......................] - ETA: 23s - loss: 0.4442 - accuracy: 0.7940
256/938 [=======>......................] - ETA: 22s - loss: 0.4419 - accuracy: 0.7950
272/938 [=======>......................] - ETA: 22s - loss: 0.4405 - accuracy: 0.7958
288/938 [========>.....................] - ETA: 21s - loss: 0.4412 - accuracy: 0.7957
304/938 [========>.....................] - ETA: 21s - loss: 0.4408 - accuracy: 0.7956
320/938 [=========>....................] - ETA: 20s - loss: 0.4406 - accuracy: 0.7957
336/938 [=========>....................] - ETA: 19s - loss: 0.4413 - accuracy: 0.7958
352/938 [==========>...................] - ETA: 19s - loss: 0.4415 - accuracy: 0.7952
368/938 [==========>...................] - ETA: 18s - loss: 0.4421 - accuracy: 0.7949
384/938 [===========>..................] - ETA: 18s - loss: 0.4417 - accuracy: 0.7952
400/938 [===========>..................] - ETA: 17s - loss: 0.4418 - accuracy: 0.7951
416/938 [============>.................] - ETA: 17s - loss: 0.4421 - accuracy: 0.7950
432/938 [============>.................] - ETA: 16s - loss: 0.4425 - accuracy: 0.7946
448/938 [=============>................] - ETA: 16s - loss: 0.4426 - accuracy: 0.7948
464/938 [=============>................] - ETA: 15s - loss: 0.4421 - accuracy: 0.7951
480/938 [==============>...............] - ETA: 15s - loss: 0.4419 - accuracy: 0.7954
496/938 [==============>...............] - ETA: 14s - loss: 0.4420 - accuracy: 0.7957
512/938 [===============>..............] - ETA: 14s - loss: 0.4426 - accuracy: 0.7951
528/938 [===============>..............] - ETA: 13s - loss: 0.4428 - accuracy: 0.7951
544/938 [================>.............] - ETA: 12s - loss: 0.4428 - accuracy: 0.7952
560/938 [================>.............] - ETA: 12s - loss: 0.4415 - accuracy: 0.7961
576/938 [=================>............] - ETA: 11s - loss: 0.4414 - accuracy: 0.7959
592/938 [=================>............] - ETA: 11s - loss: 0.4417 - accuracy: 0.7959
608/938 [==================>...........] - ETA: 10s - loss: 0.4420 - accuracy: 0.7956
624/938 [==================>...........] - ETA: 10s - loss: 0.4421 - accuracy: 0.7959
640/938 [===================>..........] - ETA: 9s - loss: 0.4425 - accuracy: 0.7957
656/938 [===================>..........] - ETA: 9s - loss: 0.4426 - accuracy: 0.7956
672/938 [====================>.........] - ETA: 8s - loss: 0.4434 - accuracy: 0.7948
688/938 [=====================>........] - ETA: 8s - loss: 0.4429 - accuracy: 0.7949
704/938 [=====================>........] - ETA: 7s - loss: 0.4427 - accuracy: 0.7954
720/938 [======================>.......] - ETA: 7s - loss: 0.4434 - accuracy: 0.7949
736/938 [======================>.......] - ETA: 6s - loss: 0.4437 - accuracy: 0.7949
752/938 [=======================>......] - ETA: 6s - loss: 0.4435 - accuracy: 0.7949
768/938 [=======================>......] - ETA: 5s - loss: 0.4438 - accuracy: 0.7948
784/938 [========================>.....] - ETA: 5s - loss: 0.4442 - accuracy: 0.7945
800/938 [========================>.....] - ETA: 4s - loss: 0.4443 - accuracy: 0.7944
816/938 [=========================>....] - ETA: 3s - loss: 0.4447 - accuracy: 0.7942
832/938 [=========================>....] - ETA: 3s - loss: 0.4448 - accuracy: 0.7939
848/938 [==========================>...] - ETA: 2s - loss: 0.4449 - accuracy: 0.7938
864/938 [==========================>...] - ETA: 2s - loss: 0.4448 - accuracy: 0.7939
880/938 [===========================>..] - ETA: 1s - loss: 0.4446 - accuracy: 0.7940
896/938 [===========================>..] - ETA: 1s - loss: 0.4449 - accuracy: 0.7939
912/938 [============================>.] - ETA: 0s - loss: 0.4444 - accuracy: 0.7941
928/938 [============================>.] - ETA: 0s - loss: 0.4443 - accuracy: 0.7940
938/938 [==============================] - 31s 32ms/step - loss: 0.4448 - accuracy: 0.7935
Epoch 8/10
1/938 [..............................] - ETA: 7:04 - loss: 0.4919 - accuracy: 0.7344
16/938 [..............................] - ETA: 32s - loss: 0.4506 - accuracy: 0.7822
32/938 [>.............................] - ETA: 31s - loss: 0.4459 - accuracy: 0.7871
48/938 [>.............................] - ETA: 30s - loss: 0.4571 - accuracy: 0.7835
64/938 [=>............................] - ETA: 29s - loss: 0.4509 - accuracy: 0.7864
80/938 [=>............................] - ETA: 28s - loss: 0.4539 - accuracy: 0.7844
96/938 [==>...........................] - ETA: 28s - loss: 0.4521 - accuracy: 0.7856
112/938 [==>...........................] - ETA: 27s - loss: 0.4489 - accuracy: 0.7888
128/938 [===>..........................] - ETA: 27s - loss: 0.4533 - accuracy: 0.7875
144/938 [===>..........................] - ETA: 26s - loss: 0.4494 - accuracy: 0.7910
160/938 [====>.........................] - ETA: 25s - loss: 0.4509 - accuracy: 0.7912
176/938 [====>.........................] - ETA: 25s - loss: 0.4495 - accuracy: 0.7919
192/938 [=====>........................] - ETA: 24s - loss: 0.4482 - accuracy: 0.7925
208/938 [=====>........................] - ETA: 24s - loss: 0.4462 - accuracy: 0.7936
224/938 [======>.......................] - ETA: 23s - loss: 0.4452 - accuracy: 0.7949
240/938 [======>.......................] - ETA: 23s - loss: 0.4446 - accuracy: 0.7960
256/938 [=======>......................] - ETA: 22s - loss: 0.4425 - accuracy: 0.7962
272/938 [=======>......................] - ETA: 22s - loss: 0.4414 - accuracy: 0.7968
288/938 [========>.....................] - ETA: 21s - loss: 0.4415 - accuracy: 0.7964
304/938 [========>.....................] - ETA: 21s - loss: 0.4411 - accuracy: 0.7959
320/938 [=========>....................] - ETA: 20s - loss: 0.4411 - accuracy: 0.7957
336/938 [=========>....................] - ETA: 19s - loss: 0.4417 - accuracy: 0.7955
352/938 [==========>...................] - ETA: 19s - loss: 0.4415 - accuracy: 0.7955
368/938 [==========>...................] - ETA: 18s - loss: 0.4415 - accuracy: 0.7953
384/938 [===========>..................] - ETA: 18s - loss: 0.4414 - accuracy: 0.7957
400/938 [===========>..................] - ETA: 17s - loss: 0.4417 - accuracy: 0.7957
416/938 [============>.................] - ETA: 17s - loss: 0.4410 - accuracy: 0.7961
432/938 [============>.................] - ETA: 16s - loss: 0.4419 - accuracy: 0.7958
448/938 [=============>................] - ETA: 16s - loss: 0.4417 - accuracy: 0.7961
464/938 [=============>................] - ETA: 15s - loss: 0.4422 - accuracy: 0.7955
480/938 [==============>...............] - ETA: 15s - loss: 0.4419 - accuracy: 0.7956
496/938 [==============>...............] - ETA: 14s - loss: 0.4416 - accuracy: 0.7957
512/938 [===============>..............] - ETA: 14s - loss: 0.4427 - accuracy: 0.7951
528/938 [===============>..............] - ETA: 13s - loss: 0.4424 - accuracy: 0.7955
544/938 [================>.............] - ETA: 12s - loss: 0.4426 - accuracy: 0.7954
560/938 [================>.............] - ETA: 12s - loss: 0.4414 - accuracy: 0.7963
576/938 [=================>............] - ETA: 11s - loss: 0.4411 - accuracy: 0.7963
592/938 [=================>............] - ETA: 11s - loss: 0.4411 - accuracy: 0.7965
608/938 [==================>...........] - ETA: 10s - loss: 0.4418 - accuracy: 0.7959
624/938 [==================>...........] - ETA: 10s - loss: 0.4417 - accuracy: 0.7961
640/938 [===================>..........] - ETA: 9s - loss: 0.4423 - accuracy: 0.7961
656/938 [===================>..........] - ETA: 9s - loss: 0.4422 - accuracy: 0.7960
672/938 [====================>.........] - ETA: 8s - loss: 0.4430 - accuracy: 0.7954
688/938 [=====================>........] - ETA: 8s - loss: 0.4425 - accuracy: 0.7958
704/938 [=====================>........] - ETA: 7s - loss: 0.4425 - accuracy: 0.7960
720/938 [======================>.......] - ETA: 7s - loss: 0.4430 - accuracy: 0.7957
736/938 [======================>.......] - ETA: 6s - loss: 0.4435 - accuracy: 0.7955
752/938 [=======================>......] - ETA: 6s - loss: 0.4430 - accuracy: 0.7959
768/938 [=======================>......] - ETA: 5s - loss: 0.4433 - accuracy: 0.7959
784/938 [========================>.....] - ETA: 5s - loss: 0.4435 - accuracy: 0.7958
800/938 [========================>.....] - ETA: 4s - loss: 0.4437 - accuracy: 0.7959
816/938 [=========================>....] - ETA: 3s - loss: 0.4440 - accuracy: 0.7956
832/938 [=========================>....] - ETA: 3s - loss: 0.4440 - accuracy: 0.7954
848/938 [==========================>...] - ETA: 2s - loss: 0.4442 - accuracy: 0.7952
864/938 [==========================>...] - ETA: 2s - loss: 0.4441 - accuracy: 0.7952
880/938 [===========================>..] - ETA: 1s - loss: 0.4438 - accuracy: 0.7953
896/938 [===========================>..] - ETA: 1s - loss: 0.4441 - accuracy: 0.7951
912/938 [============================>.] - ETA: 0s - loss: 0.4437 - accuracy: 0.7954
928/938 [============================>.] - ETA: 0s - loss: 0.4435 - accuracy: 0.7954
938/938 [==============================] - 31s 32ms/step - loss: 0.4439 - accuracy: 0.7950
Epoch 9/10
1/938 [..............................] - ETA: 7:03 - loss: 0.5275 - accuracy: 0.7656
16/938 [..............................] - ETA: 32s - loss: 0.4546 - accuracy: 0.7910
32/938 [>.............................] - ETA: 31s - loss: 0.4495 - accuracy: 0.7881
48/938 [>.............................] - ETA: 30s - loss: 0.4595 - accuracy: 0.7855
64/938 [=>............................] - ETA: 29s - loss: 0.4507 - accuracy: 0.7905
80/938 [=>............................] - ETA: 28s - loss: 0.4521 - accuracy: 0.7895
96/938 [==>...........................] - ETA: 28s - loss: 0.4510 - accuracy: 0.7917
112/938 [==>...........................] - ETA: 27s - loss: 0.4500 - accuracy: 0.7913
128/938 [===>..........................] - ETA: 27s - loss: 0.4516 - accuracy: 0.7904
144/938 [===>..........................] - ETA: 26s - loss: 0.4484 - accuracy: 0.7920
160/938 [====>.........................] - ETA: 26s - loss: 0.4502 - accuracy: 0.7908
176/938 [====>.........................] - ETA: 25s - loss: 0.4475 - accuracy: 0.7925
192/938 [=====>........................] - ETA: 24s - loss: 0.4470 - accuracy: 0.7922
208/938 [=====>........................] - ETA: 24s - loss: 0.4449 - accuracy: 0.7935
224/938 [======>.......................] - ETA: 23s - loss: 0.4443 - accuracy: 0.7942
240/938 [======>.......................] - ETA: 23s - loss: 0.4436 - accuracy: 0.7949
256/938 [=======>......................] - ETA: 22s - loss: 0.4410 - accuracy: 0.7961
272/938 [=======>......................] - ETA: 22s - loss: 0.4400 - accuracy: 0.7969
288/938 [========>.....................] - ETA: 21s - loss: 0.4405 - accuracy: 0.7969
304/938 [========>.....................] - ETA: 21s - loss: 0.4399 - accuracy: 0.7973
320/938 [=========>....................] - ETA: 20s - loss: 0.4396 - accuracy: 0.7973
336/938 [=========>....................] - ETA: 19s - loss: 0.4405 - accuracy: 0.7969
352/938 [==========>...................] - ETA: 19s - loss: 0.4408 - accuracy: 0.7968
368/938 [==========>...................] - ETA: 18s - loss: 0.4407 - accuracy: 0.7968
384/938 [===========>..................] - ETA: 18s - loss: 0.4403 - accuracy: 0.7964
400/938 [===========>..................] - ETA: 17s - loss: 0.4403 - accuracy: 0.7964
416/938 [============>.................] - ETA: 17s - loss: 0.4401 - accuracy: 0.7968
432/938 [============>.................] - ETA: 16s - loss: 0.4409 - accuracy: 0.7962
448/938 [=============>................] - ETA: 16s - loss: 0.4406 - accuracy: 0.7968
464/938 [=============>................] - ETA: 15s - loss: 0.4409 - accuracy: 0.7965
480/938 [==============>...............] - ETA: 15s - loss: 0.4408 - accuracy: 0.7967
496/938 [==============>...............] - ETA: 14s - loss: 0.4405 - accuracy: 0.7971
512/938 [===============>..............] - ETA: 14s - loss: 0.4413 - accuracy: 0.7967
528/938 [===============>..............] - ETA: 13s - loss: 0.4411 - accuracy: 0.7970
544/938 [================>.............] - ETA: 12s - loss: 0.4411 - accuracy: 0.7968
560/938 [================>.............] - ETA: 12s - loss: 0.4401 - accuracy: 0.7974
576/938 [=================>............] - ETA: 11s - loss: 0.4397 - accuracy: 0.7974
592/938 [=================>............] - ETA: 11s - loss: 0.4397 - accuracy: 0.7975
608/938 [==================>...........] - ETA: 10s - loss: 0.4402 - accuracy: 0.7972
624/938 [==================>...........] - ETA: 10s - loss: 0.4400 - accuracy: 0.7974
640/938 [===================>..........] - ETA: 9s - loss: 0.4407 - accuracy: 0.7969
656/938 [===================>..........] - ETA: 9s - loss: 0.4406 - accuracy: 0.7967
672/938 [====================>.........] - ETA: 8s - loss: 0.4413 - accuracy: 0.7962
688/938 [=====================>........] - ETA: 8s - loss: 0.4410 - accuracy: 0.7962
704/938 [=====================>........] - ETA: 7s - loss: 0.4407 - accuracy: 0.7966
720/938 [======================>.......] - ETA: 7s - loss: 0.4411 - accuracy: 0.7965
736/938 [======================>.......] - ETA: 6s - loss: 0.4414 - accuracy: 0.7964
752/938 [=======================>......] - ETA: 6s - loss: 0.4410 - accuracy: 0.7966
768/938 [=======================>......] - ETA: 5s - loss: 0.4411 - accuracy: 0.7966
784/938 [========================>.....] - ETA: 5s - loss: 0.4414 - accuracy: 0.7963
800/938 [========================>.....] - ETA: 4s - loss: 0.4417 - accuracy: 0.7964
816/938 [=========================>....] - ETA: 3s - loss: 0.4421 - accuracy: 0.7960
832/938 [=========================>....] - ETA: 3s - loss: 0.4420 - accuracy: 0.7959
848/938 [==========================>...] - ETA: 2s - loss: 0.4425 - accuracy: 0.7956
864/938 [==========================>...] - ETA: 2s - loss: 0.4423 - accuracy: 0.7958
880/938 [===========================>..] - ETA: 1s - loss: 0.4422 - accuracy: 0.7959
896/938 [===========================>..] - ETA: 1s - loss: 0.4423 - accuracy: 0.7959
912/938 [============================>.] - ETA: 0s - loss: 0.4420 - accuracy: 0.7960
928/938 [============================>.] - ETA: 0s - loss: 0.4419 - accuracy: 0.7960
938/938 [==============================] - 31s 32ms/step - loss: 0.4421 - accuracy: 0.7956
Epoch 10/10
1/938 [..............................] - ETA: 7:04 - loss: 0.3892 - accuracy: 0.7812
16/938 [..............................] - ETA: 32s - loss: 0.4551 - accuracy: 0.7803
32/938 [>.............................] - ETA: 31s - loss: 0.4466 - accuracy: 0.7891
48/938 [>.............................] - ETA: 30s - loss: 0.4600 - accuracy: 0.7812
64/938 [=>............................] - ETA: 29s - loss: 0.4496 - accuracy: 0.7891
80/938 [=>............................] - ETA: 28s - loss: 0.4531 - accuracy: 0.7881
96/938 [==>...........................] - ETA: 28s - loss: 0.4528 - accuracy: 0.7887
112/938 [==>...........................] - ETA: 27s - loss: 0.4499 - accuracy: 0.7909
128/938 [===>..........................] - ETA: 27s - loss: 0.4528 - accuracy: 0.7887
144/938 [===>..........................] - ETA: 26s - loss: 0.4497 - accuracy: 0.7908
160/938 [====>.........................] - ETA: 26s - loss: 0.4500 - accuracy: 0.7913
176/938 [====>.........................] - ETA: 25s - loss: 0.4473 - accuracy: 0.7928
192/938 [=====>........................] - ETA: 24s - loss: 0.4466 - accuracy: 0.7936
208/938 [=====>........................] - ETA: 24s - loss: 0.4450 - accuracy: 0.7936
224/938 [======>.......................] - ETA: 23s - loss: 0.4448 - accuracy: 0.7950
240/938 [======>.......................] - ETA: 23s - loss: 0.4431 - accuracy: 0.7964
256/938 [=======>......................] - ETA: 22s - loss: 0.4406 - accuracy: 0.7982
272/938 [=======>......................] - ETA: 22s - loss: 0.4405 - accuracy: 0.7984
288/938 [========>.....................] - ETA: 21s - loss: 0.4413 - accuracy: 0.7986
304/938 [========>.....................] - ETA: 21s - loss: 0.4410 - accuracy: 0.7985
320/938 [=========>....................] - ETA: 20s - loss: 0.4407 - accuracy: 0.7983
336/938 [=========>....................] - ETA: 19s - loss: 0.4412 - accuracy: 0.7983
352/938 [==========>...................] - ETA: 19s - loss: 0.4413 - accuracy: 0.7980
368/938 [==========>...................] - ETA: 18s - loss: 0.4409 - accuracy: 0.7981
384/938 [===========>..................] - ETA: 18s - loss: 0.4407 - accuracy: 0.7979
400/938 [===========>..................] - ETA: 17s - loss: 0.4409 - accuracy: 0.7976
416/938 [============>.................] - ETA: 17s - loss: 0.4406 - accuracy: 0.7979
432/938 [============>.................] - ETA: 16s - loss: 0.4411 - accuracy: 0.7975
448/938 [=============>................] - ETA: 16s - loss: 0.4410 - accuracy: 0.7979
464/938 [=============>................] - ETA: 15s - loss: 0.4413 - accuracy: 0.7975
480/938 [==============>...............] - ETA: 15s - loss: 0.4412 - accuracy: 0.7979
496/938 [==============>...............] - ETA: 14s - loss: 0.4407 - accuracy: 0.7980
512/938 [===============>..............] - ETA: 14s - loss: 0.4414 - accuracy: 0.7978
528/938 [===============>..............] - ETA: 13s - loss: 0.4414 - accuracy: 0.7977
544/938 [================>.............] - ETA: 12s - loss: 0.4414 - accuracy: 0.7977
560/938 [================>.............] - ETA: 12s - loss: 0.4402 - accuracy: 0.7983
576/938 [=================>............] - ETA: 11s - loss: 0.4401 - accuracy: 0.7979
592/938 [=================>............] - ETA: 11s - loss: 0.4399 - accuracy: 0.7980
608/938 [==================>...........] - ETA: 10s - loss: 0.4402 - accuracy: 0.7978
624/938 [==================>...........] - ETA: 10s - loss: 0.4404 - accuracy: 0.7980
640/938 [===================>..........] - ETA: 9s - loss: 0.4406 - accuracy: 0.7978
656/938 [===================>..........] - ETA: 9s - loss: 0.4408 - accuracy: 0.7976
672/938 [====================>.........] - ETA: 8s - loss: 0.4417 - accuracy: 0.7970
688/938 [=====================>........] - ETA: 8s - loss: 0.4411 - accuracy: 0.7974
704/938 [=====================>........] - ETA: 7s - loss: 0.4408 - accuracy: 0.7974
720/938 [======================>.......] - ETA: 7s - loss: 0.4414 - accuracy: 0.7969
736/938 [======================>.......] - ETA: 6s - loss: 0.4417 - accuracy: 0.7970
752/938 [=======================>......] - ETA: 6s - loss: 0.4415 - accuracy: 0.7971
768/938 [=======================>......] - ETA: 5s - loss: 0.4418 - accuracy: 0.7970
784/938 [========================>.....] - ETA: 5s - loss: 0.4418 - accuracy: 0.7970
800/938 [========================>.....] - ETA: 4s - loss: 0.4421 - accuracy: 0.7970
816/938 [=========================>....] - ETA: 3s - loss: 0.4425 - accuracy: 0.7965
832/938 [=========================>....] - ETA: 3s - loss: 0.4425 - accuracy: 0.7962
848/938 [==========================>...] - ETA: 2s - loss: 0.4426 - accuracy: 0.7962
864/938 [==========================>...] - ETA: 2s - loss: 0.4425 - accuracy: 0.7963
880/938 [===========================>..] - ETA: 1s - loss: 0.4423 - accuracy: 0.7964
896/938 [===========================>..] - ETA: 1s - loss: 0.4426 - accuracy: 0.7963
912/938 [============================>.] - ETA: 0s - loss: 0.4422 - accuracy: 0.7967
928/938 [============================>.] - ETA: 0s - loss: 0.4421 - accuracy: 0.7967
938/938 [==============================] - 31s 32ms/step - loss: 0.4425 - accuracy: 0.7962
<keras.callbacks.History at 0x7fb364fd2a90>

Since only a fraction of the dataset is being utilized, our accuracy is limited to ~78% during the training phase. However, please feel free to store additional data in kafka for a better model performance. Also, since the goal was to just demonstrate the functionality of the tfio kafka datasets, a smaller and less-complicated neural network was used. However, one can increase the complexity of the model, modify the learning strategy, tune hyper-parameters etc for exploration purposes. For a baseline approach, please refer to this article.

Infer on the test data

To infer on the test data by adhering to the 'exactly-once' semantics along with fault-tolerance, the streaming.KafkaGroupIODataset can be utilized.

Define the tfio test dataset

The stream_timeout parameter blocks for the given duration for new data points to be streamed into the topic. This removes the need for creating new datasets if the data is being streamed into the topic in an intermittent fashion.

test_ds = tfio.experimental.streaming.KafkaGroupIODataset(
    topics=["susy-test"],
    group_id="testcg",
    servers="127.0.0.1:9092",
    stream_timeout=10000,
    configuration=[
        "session.timeout.ms=7000",
        "max.poll.interval.ms=8000",
        "auto.offset.reset=earliest"
    ],
)

def decode_kafka_test_item(raw_message, raw_key):
  message = tf.io.decode_csv(raw_message, [[0.0] for i in range(NUM_COLUMNS)])
  key = tf.strings.to_number(raw_key)
  return (message, key)

test_ds = test_ds.map(decode_kafka_test_item)
test_ds = test_ds.batch(BATCH_SIZE)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_io/python/experimental/kafka_group_io_dataset_ops.py:188: take_while (from tensorflow.python.data.experimental.ops.take_while_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.data.Dataset.take_while(...)

Though this class can be used for training purposes, there are caveats which need to be addressed. Once all the messages are read from kafka and the latest offsets are committed using the streaming.KafkaGroupIODataset, the consumer doesn't restart reading the messages from the beginning. Thus, while training, it is possible only to train for a single epoch with the data continuously flowing in. This kind of a functionality has limited use cases during the training phase wherein, once a datapoint has been consumed by the model it is no longer required and can be discarded.

However, this functionality shines when it comes to robust inference with exactly-once semantics.

evaluate the performance on the test data

res = model.evaluate(test_ds)
print("test loss, test acc:", res)
1/Unknown - 0s 317ms/step - loss: 0.4462 - accuracy: 0.7500
34/Unknown - 0s 2ms/step - loss: 0.4434 - accuracy: 0.8194
2022-01-07 20:34:29.402707: E tensorflow_io/core/kernels/kafka_kernels.cc:774] REBALANCE: Local: Assign partitions
2022-01-07 20:34:29.406789: E tensorflow_io/core/kernels/kafka_kernels.cc:776] Retrieved committed offsets with status code: 0
68/Unknown - 0s 2ms/step - loss: 0.4420 - accuracy: 0.8199
102/Unknown - 0s 2ms/step - loss: 0.4472 - accuracy: 0.8078
137/Unknown - 1s 2ms/step - loss: 0.4550 - accuracy: 0.7935
172/Unknown - 1s 1ms/step - loss: 0.4551 - accuracy: 0.7850
210/Unknown - 1s 1ms/step - loss: 0.4521 - accuracy: 0.7864
249/Unknown - 1s 1ms/step - loss: 0.4506 - accuracy: 0.7914
287/Unknown - 1s 1ms/step - loss: 0.4476 - accuracy: 0.7940
325/Unknown - 1s 1ms/step - loss: 0.4478 - accuracy: 0.7912
361/Unknown - 1s 1ms/step - loss: 0.4485 - accuracy: 0.7868
398/Unknown - 1s 1ms/step - loss: 0.4469 - accuracy: 0.7890
433/Unknown - 1s 1ms/step - loss: 0.4438 - accuracy: 0.7926
469/Unknown - 1s 1ms/step - loss: 0.4435 - accuracy: 0.7931
508/Unknown - 1s 1ms/step - loss: 0.4441 - accuracy: 0.7906
544/Unknown - 1s 1ms/step - loss: 0.4442 - accuracy: 0.7891
582/Unknown - 1s 1ms/step - loss: 0.4438 - accuracy: 0.7902
621/Unknown - 1s 1ms/step - loss: 0.4435 - accuracy: 0.7916
625/625 [==============================] - 11s 17ms/step - loss: 0.4437 - accuracy: 0.7915
test loss, test acc: [0.4436523914337158, 0.7915250062942505]
2022-01-07 20:34:40.051954: E tensorflow_io/core/kernels/kafka_kernels.cc:1001] Local: Timed out

Since the inference is based on 'exactly-once' semantics, the evaluation on the test set can be run only once. In order to run the inference again on the test data, a new consumer group should be used.

Track the offset lag of the testcg consumer group

./kafka_2.13-2.7.2/bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group testcg
GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                  HOST            CLIENT-ID
testcg          susy-test       0          21626           21626           0               rdkafka-534f63d0-b91e-4976-a3ca-832b6c91210e /10.142.0.103   rdkafka
testcg          susy-test       1          18374           18374           0               rdkafka-534f63d0-b91e-4976-a3ca-832b6c91210e /10.142.0.103   rdkafka

Once the current-offset matches the log-end-offset for all the partitions, it indicates that the consumer(s) have completed fetching all the messages from the kafka topic.

Online learning

The online machine learning paradigm is a bit different from the traditional/conventional way of training machine learning models. In the former case, the model continues to incrementally learn/update it's parameters as soon as the new data points are available and this process is expected to continue indefinitely. This is unlike the latter approaches where the dataset is fixed and the model iterates over it n number of times. In online learning, the data once consumed by the model may not be available for training again.

By utilizing the streaming.KafkaBatchIODataset, it is now possible to train the models in this fashion. Let's continue to use our SUSY dataset for demonstrating this functionality.

The tfio training dataset for online learning

The streaming.KafkaBatchIODataset is similar to the streaming.KafkaGroupIODataset in it's API. Additionally, it is recommended to utilize the stream_timeout parameter to configure the duration for which the dataset will block for new messages before timing out. In the instance below, the dataset is configured with a stream_timeout of 10000 milliseconds. This implies that, after all the messages from the topic have been consumed, the dataset will wait for an additional 10 seconds before timing out and disconnecting from the kafka cluster. If new messages are streamed into the topic before timing out, the data consumption and model training resumes for those newly consumed data points. To block indefinitely, set it to -1.

online_train_ds = tfio.experimental.streaming.KafkaBatchIODataset(
    topics=["susy-train"],
    group_id="cgonline",
    servers="127.0.0.1:9092",
    stream_timeout=10000, # in milliseconds, to block indefinitely, set it to -1.
    configuration=[
        "session.timeout.ms=7000",
        "max.poll.interval.ms=8000",
        "auto.offset.reset=earliest"
    ],
)

Every item that the online_train_ds generates is a tf.data.Dataset in itself. Thus, all the standard transformations can be applied as usual.

def decode_kafka_online_item(raw_message, raw_key):
  message = tf.io.decode_csv(raw_message, [[0.0] for i in range(NUM_COLUMNS)])
  key = tf.strings.to_number(raw_key)
  return (message, key)

for mini_ds in online_train_ds:
  mini_ds = mini_ds.shuffle(buffer_size=32)
  mini_ds = mini_ds.map(decode_kafka_online_item)
  mini_ds = mini_ds.batch(32)
  if len(mini_ds) > 0:
    model.fit(mini_ds, epochs=3)
2022-01-07 20:34:42.024915: E tensorflow_io/core/kernels/kafka_kernels.cc:774] REBALANCE: Local: Assign partitions
2022-01-07 20:34:42.025797: E tensorflow_io/core/kernels/kafka_kernels.cc:776] Retrieved committed offsets with status code: 0
Epoch 1/3
1/313 [..............................] - ETA: 1s - loss: 0.4036 - accuracy: 0.8438
24/313 [=>............................] - ETA: 0s - loss: 0.4580 - accuracy: 0.7852
48/313 [===>..........................] - ETA: 0s - loss: 0.4605 - accuracy: 0.7878
72/313 [=====>........................] - ETA: 0s - loss: 0.4540 - accuracy: 0.7912
96/313 [========>.....................] - ETA: 0s - loss: 0.4633 - accuracy: 0.7858
120/313 [==========>...................] - ETA: 0s - loss: 0.4536 - accuracy: 0.7919
144/313 [============>.................] - ETA: 0s - loss: 0.4563 - accuracy: 0.7906
168/313 [===============>..............] - ETA: 0s - loss: 0.4545 - accuracy: 0.7913
192/313 [=================>............] - ETA: 0s - loss: 0.4560 - accuracy: 0.7913
216/313 [===================>..........] - ETA: 0s - loss: 0.4538 - accuracy: 0.7922
240/313 [======================>.......] - ETA: 0s - loss: 0.4543 - accuracy: 0.7918
264/313 [========================>.....] - ETA: 0s - loss: 0.4567 - accuracy: 0.7898
288/313 [==========================>...] - ETA: 0s - loss: 0.4537 - accuracy: 0.7912
312/313 [============================>.] - ETA: 0s - loss: 0.4554 - accuracy: 0.7912
313/313 [==============================] - 1s 2ms/step - loss: 0.4561 - accuracy: 0.7909
Epoch 2/3
1/313 [..............................] - ETA: 1s - loss: 0.3691 - accuracy: 0.8438
24/313 [=>............................] - ETA: 0s - loss: 0.4521 - accuracy: 0.7865
48/313 [===>..........................] - ETA: 0s - loss: 0.4597 - accuracy: 0.7897
72/313 [=====>........................] - ETA: 0s - loss: 0.4562 - accuracy: 0.7930
96/313 [========>.....................] - ETA: 0s - loss: 0.4629 - accuracy: 0.7887
120/313 [==========>...................] - ETA: 0s - loss: 0.4518 - accuracy: 0.7956
144/313 [============>.................] - ETA: 0s - loss: 0.4566 - accuracy: 0.7919
168/313 [===============>..............] - ETA: 0s - loss: 0.4537 - accuracy: 0.7915
192/313 [=================>............] - ETA: 0s - loss: 0.4559 - accuracy: 0.7909
216/313 [===================>..........] - ETA: 0s - loss: 0.4524 - accuracy: 0.7921
240/313 [======================>.......] - ETA: 0s - loss: 0.4525 - accuracy: 0.7923
264/313 [========================>.....] - ETA: 0s - loss: 0.4551 - accuracy: 0.7910
288/313 [==========================>...] - ETA: 0s - loss: 0.4524 - accuracy: 0.7920
312/313 [============================>.] - ETA: 0s - loss: 0.4535 - accuracy: 0.7911
313/313 [==============================] - 1s 2ms/step - loss: 0.4538 - accuracy: 0.7909
Epoch 3/3
1/313 [..............................] - ETA: 1s - loss: 0.4029 - accuracy: 0.7812
24/313 [=>............................] - ETA: 0s - loss: 0.4500 - accuracy: 0.7917
47/313 [===>..........................] - ETA: 0s - loss: 0.4627 - accuracy: 0.7899
70/313 [=====>........................] - ETA: 0s - loss: 0.4571 - accuracy: 0.7942
94/313 [========>.....................] - ETA: 0s - loss: 0.4632 - accuracy: 0.7906
118/313 [==========>...................] - ETA: 0s - loss: 0.4530 - accuracy: 0.7961
141/313 [============>.................] - ETA: 0s - loss: 0.4564 - accuracy: 0.7932
164/313 [==============>...............] - ETA: 0s - loss: 0.4524 - accuracy: 0.7961
187/313 [================>.............] - ETA: 0s - loss: 0.4500 - accuracy: 0.7960
210/313 [===================>..........] - ETA: 0s - loss: 0.4483 - accuracy: 0.7966
234/313 [=====================>........] - ETA: 0s - loss: 0.4496 - accuracy: 0.7955
257/313 [=======================>......] - ETA: 0s - loss: 0.4516 - accuracy: 0.7943
280/313 [=========================>....] - ETA: 0s - loss: 0.4478 - accuracy: 0.7959
303/313 [============================>.] - ETA: 0s - loss: 0.4501 - accuracy: 0.7945
313/313 [==============================] - 1s 2ms/step - loss: 0.4499 - accuracy: 0.7947
Epoch 1/3
1/313 [..............................] - ETA: 1s - loss: 0.5160 - accuracy: 0.8125
25/313 [=>............................] - ETA: 0s - loss: 0.4322 - accuracy: 0.8112
48/313 [===>..........................] - ETA: 0s - loss: 0.4178 - accuracy: 0.8112
72/313 [=====>........................] - ETA: 0s - loss: 0.4307 - accuracy: 0.8043
95/313 [========>.....................] - ETA: 0s - loss: 0.4329 - accuracy: 0.8036
118/313 [==========>...................] - ETA: 0s - loss: 0.4270 - accuracy: 0.8077
142/313 [============>.................] - ETA: 0s - loss: 0.4332 - accuracy: 0.8072
166/313 [==============>...............] - ETA: 0s - loss: 0.4335 - accuracy: 0.8065
189/313 [=================>............] - ETA: 0s - loss: 0.4319 - accuracy: 0.8059
213/313 [===================>..........] - ETA: 0s - loss: 0.4301 - accuracy: 0.8062
236/313 [=====================>........] - ETA: 0s - loss: 0.4309 - accuracy: 0.8053
260/313 [=======================>......] - ETA: 0s - loss: 0.4334 - accuracy: 0.8041
284/313 [==========================>...] - ETA: 0s - loss: 0.4343 - accuracy: 0.8029
307/313 [============================>.] - ETA: 0s - loss: 0.4351 - accuracy: 0.8014
313/313 [==============================] - 1s 2ms/step - loss: 0.4347 - accuracy: 0.8018
Epoch 2/3
1/313 [..............................] - ETA: 1s - loss: 0.4240 - accuracy: 0.8125
25/313 [=>............................] - ETA: 0s - loss: 0.4338 - accuracy: 0.8075
49/313 [===>..........................] - ETA: 0s - loss: 0.4216 - accuracy: 0.8125
74/313 [======>.......................] - ETA: 0s - loss: 0.4244 - accuracy: 0.8091
98/313 [========>.....................] - ETA: 0s - loss: 0.4287 - accuracy: 0.8084
122/313 [==========>...................] - ETA: 0s - loss: 0.4258 - accuracy: 0.8069
146/313 [============>.................] - ETA: 0s - loss: 0.4295 - accuracy: 0.8082
170/313 [===============>..............] - ETA: 0s - loss: 0.4280 - accuracy: 0.8092
194/313 [=================>............] - ETA: 0s - loss: 0.4264 - accuracy: 0.8080
218/313 [===================>..........] - ETA: 0s - loss: 0.4257 - accuracy: 0.8085
242/313 [======================>.......] - ETA: 0s - loss: 0.4287 - accuracy: 0.8060
266/313 [========================>.....] - ETA: 0s - loss: 0.4298 - accuracy: 0.8062
290/313 [==========================>...] - ETA: 0s - loss: 0.4298 - accuracy: 0.8051
313/313 [==============================] - 1s 2ms/step - loss: 0.4314 - accuracy: 0.8048
Epoch 3/3
1/313 [..............................] - ETA: 1s - loss: 0.4738 - accuracy: 0.7812
25/313 [=>............................] - ETA: 0s - loss: 0.4344 - accuracy: 0.8000
49/313 [===>..........................] - ETA: 0s - loss: 0.4190 - accuracy: 0.8093
73/313 [=====>........................] - ETA: 0s - loss: 0.4255 - accuracy: 0.8048
97/313 [========>.....................] - ETA: 0s - loss: 0.4281 - accuracy: 0.8048
120/313 [==========>...................] - ETA: 0s - loss: 0.4240 - accuracy: 0.8091
144/313 [============>.................] - ETA: 0s - loss: 0.4289 - accuracy: 0.8105
168/313 [===============>..............] - ETA: 0s - loss: 0.4261 - accuracy: 0.8106
192/313 [=================>............] - ETA: 0s - loss: 0.4255 - accuracy: 0.8101
216/313 [===================>..........] - ETA: 0s - loss: 0.4250 - accuracy: 0.8096
240/313 [======================>.......] - ETA: 0s - loss: 0.4270 - accuracy: 0.8086
264/313 [========================>.....] - ETA: 0s - loss: 0.4278 - accuracy: 0.8084
288/313 [==========================>...] - ETA: 0s - loss: 0.4277 - accuracy: 0.8069
312/313 [============================>.] - ETA: 0s - loss: 0.4288 - accuracy: 0.8062
313/313 [==============================] - 1s 2ms/step - loss: 0.4286 - accuracy: 0.8063
Epoch 1/3
1/313 [..............................] - ETA: 1s - loss: 0.6701 - accuracy: 0.6562
25/313 [=>............................] - ETA: 0s - loss: 0.4458 - accuracy: 0.8025
50/313 [===>..........................] - ETA: 0s - loss: 0.4505 - accuracy: 0.7950
74/313 [======>.......................] - ETA: 0s - loss: 0.4471 - accuracy: 0.7965
98/313 [========>.....................] - ETA: 0s - loss: 0.4517 - accuracy: 0.7921
122/313 [==========>...................] - ETA: 0s - loss: 0.4466 - accuracy: 0.7915
146/313 [============>.................] - ETA: 0s - loss: 0.4469 - accuracy: 0.7917
170/313 [===============>..............] - ETA: 0s - loss: 0.4491 - accuracy: 0.7906
194/313 [=================>............] - ETA: 0s - loss: 0.4455 - accuracy: 0.7925
218/313 [===================>..........] - ETA: 0s - loss: 0.4456 - accuracy: 0.7921
242/313 [======================>.......] - ETA: 0s - loss: 0.4490 - accuracy: 0.7896
266/313 [========================>.....] - ETA: 0s - loss: 0.4482 - accuracy: 0.7912
290/313 [==========================>...] - ETA: 0s - loss: 0.4476 - accuracy: 0.7914
313/313 [==============================] - 1s 2ms/step - loss: 0.4480 - accuracy: 0.7910
Epoch 2/3
1/313 [..............................] - ETA: 1s - loss: 0.3952 - accuracy: 0.8125
25/313 [=>............................] - ETA: 0s - loss: 0.4344 - accuracy: 0.7987
50/313 [===>..........................] - ETA: 0s - loss: 0.4469 - accuracy: 0.7956
74/313 [======>.......................] - ETA: 0s - loss: 0.4399 - accuracy: 0.7952
98/313 [========>.....................] - ETA: 0s - loss: 0.4439 - accuracy: 0.7921
121/313 [==========>...................] - ETA: 0s - loss: 0.4393 - accuracy: 0.7939
145/313 [============>.................] - ETA: 0s - loss: 0.4393 - accuracy: 0.7948
169/313 [===============>..............] - ETA: 0s - loss: 0.4411 - accuracy: 0.7936
193/313 [=================>............] - ETA: 0s - loss: 0.4400 - accuracy: 0.7936
217/313 [===================>..........] - ETA: 0s - loss: 0.4395 - accuracy: 0.7939
241/313 [======================>.......] - ETA: 0s - loss: 0.4429 - accuracy: 0.7930
265/313 [========================>.....] - ETA: 0s - loss: 0.4426 - accuracy: 0.7941
288/313 [==========================>...] - ETA: 0s - loss: 0.4416 - accuracy: 0.7948
312/313 [============================>.] - ETA: 0s - loss: 0.4425 - accuracy: 0.7946
313/313 [==============================] - 1s 2ms/step - loss: 0.4425 - accuracy: 0.7945
Epoch 3/3
1/313 [..............................] - ETA: 1s - loss: 0.4741 - accuracy: 0.7188
25/313 [=>............................] - ETA: 0s - loss: 0.4262 - accuracy: 0.8100
49/313 [===>..........................] - ETA: 0s - loss: 0.4403 - accuracy: 0.8029
73/313 [=====>........................] - ETA: 0s - loss: 0.4325 - accuracy: 0.8031
97/313 [========>.....................] - ETA: 0s - loss: 0.4392 - accuracy: 0.7986
121/313 [==========>...................] - ETA: 0s - loss: 0.4376 - accuracy: 0.7991
144/313 [============>.................] - ETA: 0s - loss: 0.4374 - accuracy: 0.7997
168/313 [===============>..............] - ETA: 0s - loss: 0.4405 - accuracy: 0.7969
192/313 [=================>............] - ETA: 0s - loss: 0.4379 - accuracy: 0.7980
216/313 [===================>..........] - ETA: 0s - loss: 0.4375 - accuracy: 0.7996
240/313 [======================>.......] - ETA: 0s - loss: 0.4396 - accuracy: 0.7979
264/313 [========================>.....] - ETA: 0s - loss: 0.4388 - accuracy: 0.7988
288/313 [==========================>...] - ETA: 0s - loss: 0.4382 - accuracy: 0.7984
312/313 [============================>.] - ETA: 0s - loss: 0.4389 - accuracy: 0.7971
313/313 [==============================] - 1s 2ms/step - loss: 0.4390 - accuracy: 0.7970
Epoch 1/3
1/313 [..............................] - ETA: 1s - loss: 0.5348 - accuracy: 0.7188
25/313 [=>............................] - ETA: 0s - loss: 0.4457 - accuracy: 0.8087
49/313 [===>..........................] - ETA: 0s - loss: 0.4390 - accuracy: 0.8068
73/313 [=====>........................] - ETA: 0s - loss: 0.4450 - accuracy: 0.8035
97/313 [========>.....................] - ETA: 0s - loss: 0.4500 - accuracy: 0.7951
121/313 [==========>...................] - ETA: 0s - loss: 0.4481 - accuracy: 0.7980
145/313 [============>.................] - ETA: 0s - loss: 0.4477 - accuracy: 0.7972
169/313 [===============>..............] - ETA: 0s - loss: 0.4459 - accuracy: 0.7960
193/313 [=================>............] - ETA: 0s - loss: 0.4409 - accuracy: 0.7995
217/313 [===================>..........] - ETA: 0s - loss: 0.4401 - accuracy: 0.7991
241/313 [======================>.......] - ETA: 0s - loss: 0.4399 - accuracy: 0.8003
265/313 [========================>.....] - ETA: 0s - loss: 0.4416 - accuracy: 0.7983
289/313 [==========================>...] - ETA: 0s - loss: 0.4429 - accuracy: 0.7961
313/313 [==============================] - ETA: 0s - loss: 0.4434 - accuracy: 0.7965
313/313 [==============================] - 1s 2ms/step - loss: 0.4434 - accuracy: 0.7965
Epoch 2/3
1/313 [..............................] - ETA: 1s - loss: 0.4956 - accuracy: 0.7812
25/313 [=>............................] - ETA: 0s - loss: 0.4351 - accuracy: 0.8100
49/313 [===>..........................] - ETA: 0s - loss: 0.4324 - accuracy: 0.8036
73/313 [=====>........................] - ETA: 0s - loss: 0.4395 - accuracy: 0.7971
97/313 [========>.....................] - ETA: 0s - loss: 0.4477 - accuracy: 0.7906
121/313 [==========>...................] - ETA: 0s - loss: 0.4428 - accuracy: 0.7967
145/313 [============>.................] - ETA: 0s - loss: 0.4413 - accuracy: 0.7983
169/313 [===============>..............] - ETA: 0s - loss: 0.4404 - accuracy: 0.7959
193/313 [=================>............] - ETA: 0s - loss: 0.4362 - accuracy: 0.7987
217/313 [===================>..........] - ETA: 0s - loss: 0.4336 - accuracy: 0.7982
241/313 [======================>.......] - ETA: 0s - loss: 0.4354 - accuracy: 0.7978
265/313 [========================>.....] - ETA: 0s - loss: 0.4367 - accuracy: 0.7980
289/313 [==========================>...] - ETA: 0s - loss: 0.4376 - accuracy: 0.7975
313/313 [==============================] - ETA: 0s - loss: 0.4380 - accuracy: 0.7974
313/313 [==============================] - 1s 2ms/step - loss: 0.4380 - accuracy: 0.7974
Epoch 3/3
1/313 [..............................] - ETA: 1s - loss: 0.3930 - accuracy: 0.8438
25/313 [=>............................] - ETA: 0s - loss: 0.4262 - accuracy: 0.8050
49/313 [===>..........................] - ETA: 0s - loss: 0.4302 - accuracy: 0.7985
73/313 [=====>........................] - ETA: 0s - loss: 0.4316 - accuracy: 0.8018
97/313 [========>.....................] - ETA: 0s - loss: 0.4411 - accuracy: 0.7922
121/313 [==========>...................] - ETA: 0s - loss: 0.4378 - accuracy: 0.7962
145/313 [============>.................] - ETA: 0s - loss: 0.4385 - accuracy: 0.7961
168/313 [===============>..............] - ETA: 0s - loss: 0.4364 - accuracy: 0.7958
192/313 [=================>............] - ETA: 0s - loss: 0.4307 - accuracy: 0.7990
216/313 [===================>..........] - ETA: 0s - loss: 0.4311 - accuracy: 0.7992
239/313 [=====================>........] - ETA: 0s - loss: 0.4325 - accuracy: 0.7993
262/313 [========================>.....] - ETA: 0s - loss: 0.4326 - accuracy: 0.7995
285/313 [==========================>...] - ETA: 0s - loss: 0.4343 - accuracy: 0.7991
309/313 [============================>.] - ETA: 0s - loss: 0.4354 - accuracy: 0.7994
313/313 [==============================] - 1s 2ms/step - loss: 0.4354 - accuracy: 0.7992
Epoch 1/3
1/313 [..............................] - ETA: 1s - loss: 0.4726 - accuracy: 0.7500
25/313 [=>............................] - ETA: 0s - loss: 0.4629 - accuracy: 0.7788
48/313 [===>..........................] - ETA: 0s - loss: 0.4507 - accuracy: 0.7845
71/313 [=====>........................] - ETA: 0s - loss: 0.4562 - accuracy: 0.7830
95/313 [========>.....................] - ETA: 0s - loss: 0.4629 - accuracy: 0.7822
119/313 [==========>...................] - ETA: 0s - loss: 0.4553 - accuracy: 0.7865
142/313 [============>.................] - ETA: 0s - loss: 0.4522 - accuracy: 0.7898
166/313 [==============>...............] - ETA: 0s - loss: 0.4516 - accuracy: 0.7893
189/313 [=================>............] - ETA: 0s - loss: 0.4543 - accuracy: 0.7894
213/313 [===================>..........] - ETA: 0s - loss: 0.4557 - accuracy: 0.7893
237/313 [=====================>........] - ETA: 0s - loss: 0.4541 - accuracy: 0.7915
261/313 [========================>.....] - ETA: 0s - loss: 0.4525 - accuracy: 0.7915
284/313 [==========================>...] - ETA: 0s - loss: 0.4514 - accuracy: 0.7920
308/313 [============================>.] - ETA: 0s - loss: 0.4535 - accuracy: 0.7901
313/313 [==============================] - 1s 2ms/step - loss: 0.4522 - accuracy: 0.7909
Epoch 2/3
1/313 [..............................] - ETA: 1s - loss: 0.5659 - accuracy: 0.6875
24/313 [=>............................] - ETA: 0s - loss: 0.4419 - accuracy: 0.7904
48/313 [===>..........................] - ETA: 0s - loss: 0.4496 - accuracy: 0.7832
72/313 [=====>........................] - ETA: 0s - loss: 0.4534 - accuracy: 0.7812
96/313 [========>.....................] - ETA: 0s - loss: 0.4555 - accuracy: 0.7799
120/313 [==========>...................] - ETA: 0s - loss: 0.4477 - accuracy: 0.7846
144/313 [============>.................] - ETA: 0s - loss: 0.4439 - accuracy: 0.7901
168/313 [===============>..............] - ETA: 0s - loss: 0.4412 - accuracy: 0.7906
192/313 [=================>............] - ETA: 0s - loss: 0.4467 - accuracy: 0.7884
216/313 [===================>..........] - ETA: 0s - loss: 0.4469 - accuracy: 0.7892
240/313 [======================>.......] - ETA: 0s - loss: 0.4459 - accuracy: 0.7902
263/313 [========================>.....] - ETA: 0s - loss: 0.4461 - accuracy: 0.7912
286/313 [==========================>...] - ETA: 0s - loss: 0.4461 - accuracy: 0.7914
310/313 [============================>.] - ETA: 0s - loss: 0.4485 - accuracy: 0.7903
313/313 [==============================] - 1s 2ms/step - loss: 0.4475 - accuracy: 0.7910
Epoch 3/3
1/313 [..............................] - ETA: 1s - loss: 0.4420 - accuracy: 0.7500
25/313 [=>............................] - ETA: 0s - loss: 0.4426 - accuracy: 0.8012
49/313 [===>..........................] - ETA: 0s - loss: 0.4497 - accuracy: 0.7997
72/313 [=====>........................] - ETA: 0s - loss: 0.4522 - accuracy: 0.7912
96/313 [========>.....................] - ETA: 0s - loss: 0.4570 - accuracy: 0.7887
120/313 [==========>...................] - ETA: 0s - loss: 0.4471 - accuracy: 0.7917
144/313 [============>.................] - ETA: 0s - loss: 0.4440 - accuracy: 0.7947
167/313 [===============>..............] - ETA: 0s - loss: 0.4433 - accuracy: 0.7947
190/313 [=================>............] - ETA: 0s - loss: 0.4457 - accuracy: 0.7931
214/313 [===================>..........] - ETA: 0s - loss: 0.4461 - accuracy: 0.7935
237/313 [=====================>........] - ETA: 0s - loss: 0.4448 - accuracy: 0.7943
261/313 [========================>.....] - ETA: 0s - loss: 0.4439 - accuracy: 0.7944
285/313 [==========================>...] - ETA: 0s - loss: 0.4429 - accuracy: 0.7953
309/313 [============================>.] - ETA: 0s - loss: 0.4450 - accuracy: 0.7936
313/313 [==============================] - 1s 2ms/step - loss: 0.4435 - accuracy: 0.7947
Epoch 1/3
1/313 [..............................] - ETA: 1s - loss: 0.3380 - accuracy: 0.8438
25/313 [=>............................] - ETA: 0s - loss: 0.4456 - accuracy: 0.7875
49/313 [===>..........................] - ETA: 0s - loss: 0.4561 - accuracy: 0.7876
73/313 [=====>........................] - ETA: 0s - loss: 0.4586 - accuracy: 0.7872
97/313 [========>.....................] - ETA: 0s - loss: 0.4546 - accuracy: 0.7874
121/313 [==========>...................] - ETA: 0s - loss: 0.4583 - accuracy: 0.7838
145/313 [============>.................] - ETA: 0s - loss: 0.4526 - accuracy: 0.7856
168/313 [===============>..............] - ETA: 0s - loss: 0.4504 - accuracy: 0.7887
192/313 [=================>............] - ETA: 0s - loss: 0.4475 - accuracy: 0.7913
216/313 [===================>..........] - ETA: 0s - loss: 0.4512 - accuracy: 0.7894
240/313 [======================>.......] - ETA: 0s - loss: 0.4464 - accuracy: 0.7918
264/313 [========================>.....] - ETA: 0s - loss: 0.4445 - accuracy: 0.7940
288/313 [==========================>...] - ETA: 0s - loss: 0.4441 - accuracy: 0.7928
312/313 [============================>.] - ETA: 0s - loss: 0.4464 - accuracy: 0.7904
313/313 [==============================] - 1s 2ms/step - loss: 0.4464 - accuracy: 0.7906
Epoch 2/3
1/313 [..............................] - ETA: 1s - loss: 0.3898 - accuracy: 0.8125
25/313 [=>............................] - ETA: 0s - loss: 0.4381 - accuracy: 0.7937
49/313 [===>..........................] - ETA: 0s - loss: 0.4484 - accuracy: 0.7889
73/313 [=====>........................] - ETA: 0s - loss: 0.4545 - accuracy: 0.7885
97/313 [========>.....................] - ETA: 0s - loss: 0.4503 - accuracy: 0.7867
121/313 [==========>...................] - ETA: 0s - loss: 0.4551 - accuracy: 0.7851
145/313 [============>.................] - ETA: 0s - loss: 0.4501 - accuracy: 0.7894
169/313 [===============>..............] - ETA: 0s - loss: 0.4482 - accuracy: 0.7914
193/313 [=================>............] - ETA: 0s - loss: 0.4466 - accuracy: 0.7936
217/313 [===================>..........] - ETA: 0s - loss: 0.4506 - accuracy: 0.7919
241/313 [======================>.......] - ETA: 0s - loss: 0.4473 - accuracy: 0.7937
265/313 [========================>.....] - ETA: 0s - loss: 0.4456 - accuracy: 0.7949
289/313 [==========================>...] - ETA: 0s - loss: 0.4440 - accuracy: 0.7951
313/313 [==============================] - ETA: 0s - loss: 0.4467 - accuracy: 0.7922
313/313 [==============================] - 1s 2ms/step - loss: 0.4467 - accuracy: 0.7922
Epoch 3/3
1/313 [..............................] - ETA: 1s - loss: 0.4130 - accuracy: 0.7812
25/313 [=>............................] - ETA: 0s - loss: 0.4473 - accuracy: 0.7900
49/313 [===>..........................] - ETA: 0s - loss: 0.4482 - accuracy: 0.7953
74/313 [======>.......................] - ETA: 0s - loss: 0.4483 - accuracy: 0.7935
98/313 [========>.....................] - ETA: 0s - loss: 0.4467 - accuracy: 0.7924
122/313 [==========>...................] - ETA: 0s - loss: 0.4496 - accuracy: 0.7902
146/313 [============>.................] - ETA: 0s - loss: 0.4456 - accuracy: 0.7930
170/313 [===============>..............] - ETA: 0s - loss: 0.4454 - accuracy: 0.7943
194/313 [=================>............] - ETA: 0s - loss: 0.4436 - accuracy: 0.7956
218/313 [===================>..........] - ETA: 0s - loss: 0.4482 - accuracy: 0.7917
242/313 [======================>.......] - ETA: 0s - loss: 0.4438 - accuracy: 0.7948
266/313 [========================>.....] - ETA: 0s - loss: 0.4406 - accuracy: 0.7964
290/313 [==========================>...] - ETA: 0s - loss: 0.4407 - accuracy: 0.7958
313/313 [==============================] - 1s 2ms/step - loss: 0.4424 - accuracy: 0.7933
2022-01-07 20:35:04.916208: E tensorflow_io/core/kernels/kafka_kernels.cc:1001] Local: Timed out

The incrementally trained model can be saved in a periodic fashion (based on use-cases) and can be utilized to infer on the test data in either online or offline modes.

References: