100% found this document useful (3 votes)
17 views82 pages

Deep Learning with Applications Using Python Chatbots and Face, Object, and Speech Recognition With TensorFlow and Keras 1st Edition by Navin Kumar Manaswi ISBN 1484235169 9781484235164 instant download

The document is a comprehensive guide on deep learning applications using Python, focusing on chatbots and various recognition systems with TensorFlow and Keras. It covers essential topics such as TensorFlow basics, Keras model building, and advanced techniques like CNNs and RNNs. The book is authored by Navin Kumar Manaswi and includes practical examples and code implementations.

Uploaded by

toebevinesug
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (3 votes)
17 views82 pages

Deep Learning with Applications Using Python Chatbots and Face, Object, and Speech Recognition With TensorFlow and Keras 1st Edition by Navin Kumar Manaswi ISBN 1484235169 9781484235164 instant download

The document is a comprehensive guide on deep learning applications using Python, focusing on chatbots and various recognition systems with TensorFlow and Keras. It covers essential topics such as TensorFlow basics, Keras model building, and advanced techniques like CNNs and RNNs. The book is authored by Navin Kumar Manaswi and includes practical examples and code implementations.

Uploaded by

toebevinesug
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 82

Deep Learning with Applications Using Python

Chatbots and Face, Object, and Speech


Recognition With TensorFlow and Keras 1st
Edition by Navin Kumar Manaswi ISBN 1484235169
9781484235164 pdf download
https://ebookball.com/product/deep-learning-with-applications-
using-python-chatbots-and-face-object-and-speech-recognition-
with-tensorflow-and-keras-1st-edition-by-navin-kumar-manaswi-
isbn-1484235169-9781484235164-16118/

Explore and download more ebooks or textbooks


at ebookball.com
Get Your Digital Files Instantly: PDF, ePub, MOBI and More
Quick Digital Downloads: PDF, ePub, MOBI and Other Formats

Deep Learning With Python 2nd Edition by Francois Chollet 1617296864


9781617296864

https://ebookball.com/product/deep-learning-with-python-2nd-
edition-by-francois-chollet-1617296864-9781617296864-17216/

Natural Language Processing With PyTorch Build Intelligent Language


Applications Using Deep Learning 1st edition by Delip Rao, Brian
McMahan 9781491978184 149197818X

https://ebookball.com/product/natural-language-processing-with-
pytorch-build-intelligent-language-applications-using-deep-
learning-1st-edition-by-delip-rao-brian-
mcmahan-9781491978184-149197818x-18728/

(Ebook PDF) Generative Adversarial Networks With Python Deep Learning


Generative Models for Image Synthesis and Image Translation 1st
edition by Jason Brownlee B0DM2GW1MW full chapters

https://ebookball.com/product/ebook-pdf-generative-adversarial-
networks-with-python-deep-learning-generative-models-for-image-
synthesis-and-image-translation-1st-edition-by-jason-
brownlee-b0dm2gw1mw-full-chapters-10052/

Hands On Machine Learning With Scikit Learn and TensorFlow Techniques


and Tools to Build Learning Machines 3rd Edition by OReilly Media ISBN
9781098122461 1098122461

https://ebookball.com/product/hands-on-machine-learning-with-
scikit-learn-and-tensorflow-techniques-and-tools-to-build-
learning-machines-3rd-edition-by-oreilly-media-
isbn-9781098122461-1098122461-15618/
Mastering Machine Learning with Python in Six Steps A Practical
Implementation Guide to Predictive Data Analytics Using Python 1st
Edition by Manohar Swamynathan ISBN 1484228669 9781484228661

https://ebookball.com/product/mastering-machine-learning-with-
python-in-six-steps-a-practical-implementation-guide-to-
predictive-data-analytics-using-python-1st-edition-by-manohar-
swamynathan-isbn-1484228669-9781484228661-16112/

Mastering Machine Learning with Python in Six Steps A Practical


Implementation Guide to Predictive Data Analytics Using Python 1st
Edition by Manohar Swamynathan ISBN 1484228669 9781484228661

https://ebookball.com/product/mastering-machine-learning-with-
python-in-six-steps-a-practical-implementation-guide-to-
predictive-data-analytics-using-python-1st-edition-by-manohar-
swamynathan-isbn-1484228669-9781484228661-16088/

Hands On Machine Learning With Scikit Learn and TensorFlow Techniques


and Tools to Build Learning Machines 1st Edition by Aurélien Géron
9352135210 9789352135219

https://ebookball.com/product/hands-on-machine-learning-with-
scikit-learn-and-tensorflow-techniques-and-tools-to-build-
learning-machines-1st-edition-by-aura-c-lien-ga-c-
ron-9352135210-9789352135219-16084/

Hands On Machine Learning with Scikit Learn and TensorFlow Concepts


Tools and Techniques to Build Intelligent Systems 1st Edition by
Aurelien Geron ISBN 1491962291 9781491962299

https://ebookball.com/product/hands-on-machine-learning-with-
scikit-learn-and-tensorflow-concepts-tools-and-techniques-to-
build-intelligent-systems-1st-edition-by-aurelien-geron-
isbn-1491962291-9781491962299-16116/

(EBook PDF) Deep Learning Machine Learning and IoT in Biomedical and
Health Informatics Techniques and Applications 1st edition by Sujata
Dash, Subhendu Kumar Pani, Joel Rodrigues, Babita Majhi 1000534057
9781000534054 full chapters
https://ebookball.com/product/ebook-pdf-deep-learning-machine-
learning-and-iot-in-biomedical-and-health-informatics-techniques-
and-applications-1st-edition-by-sujata-dash-subhendu-kumar-pani-
joel-rodrigues-babita-majhi-1000534057/
Deep Learning
with Applications
Using Python
Chatbots and Face, Object, and Speech
Recognition With TensorFlow and Keras

Navin Kumar Manaswi
Deep Learning with
Applications Using
Python
Chatbots and Face, Object,
and Speech Recognition
With TensorFlow and Keras

Navin Kumar Manaswi


Deep Learning with Applications Using Python
Navin Kumar Manaswi
Bangalore, Karnataka, India

ISBN-13 (pbk): 978-1-4842-3515-7 ISBN-13 (electronic): 978-1-4842-3516-4


https://doi.org/10.1007/978-1-4842-3516-4
Library of Congress Control Number: 2018938097

Copyright © 2018 by Navin Kumar Manaswi


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or
part of the material is concerned, specifically the rights of translation, reprinting, reuse of
illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way,
and transmission or information storage and retrieval, electronic adaptation, computer software,
or by similar or dissimilar methodology now known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark
symbol with every occurrence of a trademarked name, logo, or image we use the names, logos,
and images only in an editorial fashion and to the benefit of the trademark owner, with no
intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if
they are not identified as such, is not to be taken as an expression of opinion as to whether or not
they are subject to proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of
publication, neither the authors nor the editors nor the publisher can accept any legal
responsibility for any errors or omissions that may be made. The publisher makes no warranty,
express or implied, with respect to the material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Celestin Suresh John
Development Editor: Matthew Moodie
Coordinating Editor: Divya Modi
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505,
e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a
California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc
(SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail [email protected], or visit www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook
versions and licenses are also available for most titles. For more information, reference our Print
and eBook Bulk Sales web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is
available to readers on GitHub via the book’s product page, located at www.apress.
com/9781484235157. For more detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
Table of Contents
Foreword���������������������������������������������������������������������������������������������ix

About the Author���������������������������������������������������������������������������������xi


About the Technical Reviewer�����������������������������������������������������������xiii

Chapter 1: Basics of TensorFlow����������������������������������������������������������1


Tensors������������������������������������������������������������������������������������������������������������������2
Computational Graph and Session������������������������������������������������������������������������3
Constants, Placeholders, and Variables����������������������������������������������������������������6
Placeholders���������������������������������������������������������������������������������������������������������9
Creating Tensors�������������������������������������������������������������������������������������������������12
Fixed Tensors�������������������������������������������������������������������������������������������������13
Sequence Tensors�����������������������������������������������������������������������������������������14
Random Tensors��������������������������������������������������������������������������������������������15
Working on Matrices�������������������������������������������������������������������������������������������16
Activation Functions��������������������������������������������������������������������������������������������17
Tangent Hyperbolic and Sigmoid�������������������������������������������������������������������18
ReLU and ELU������������������������������������������������������������������������������������������������19
ReLU6������������������������������������������������������������������������������������������������������������20
Loss Functions����������������������������������������������������������������������������������������������������22
Loss Function Examples��������������������������������������������������������������������������������23
Common Loss Functions�������������������������������������������������������������������������������23

iii
Table of Contents

Optimizers�����������������������������������������������������������������������������������������������������������25
Loss Function Examples��������������������������������������������������������������������������������26
Common Optimizers��������������������������������������������������������������������������������������27
Metrics����������������������������������������������������������������������������������������������������������������28
Metrics Examples������������������������������������������������������������������������������������������28
Common Metrics�������������������������������������������������������������������������������������������29

Chapter 2: Understanding and Working with Keras���������������������������31


Major Steps to Deep Learning Models����������������������������������������������������������������32
Load Data������������������������������������������������������������������������������������������������������33
Preprocess the Data��������������������������������������������������������������������������������������33
Define the Model�������������������������������������������������������������������������������������������34
Compile the Model�����������������������������������������������������������������������������������������36
Fit the Model��������������������������������������������������������������������������������������������������37
Evaluate Model����������������������������������������������������������������������������������������������38
Prediction������������������������������������������������������������������������������������������������������38
Save and Reload the Model���������������������������������������������������������������������������39
Optional: Summarize the Model��������������������������������������������������������������������39
Additional Steps to Improve Keras Models���������������������������������������������������������40
Keras with TensorFlow����������������������������������������������������������������������������������������42

Chapter 3: Multilayer Perceptron�������������������������������������������������������45


Artificial Neural Network�������������������������������������������������������������������������������������45
Single-Layer Perceptron�������������������������������������������������������������������������������������47
Multilayer Perceptron������������������������������������������������������������������������������������������47
Logistic Regression Model����������������������������������������������������������������������������������49

iv
Table of Contents

Chapter 4: Regression to MLP in TensorFlow�������������������������������������57


TensorFlow Steps to Build Models����������������������������������������������������������������������57
Linear Regression in TensorFlow������������������������������������������������������������������������58
Logistic Regression Model����������������������������������������������������������������������������������62
Multilayer Perceptron in TensorFlow������������������������������������������������������������������65

Chapter 5: Regression to MLP in Keras����������������������������������������������69


Log-Linear Model������������������������������������������������������������������������������������������������69
Keras Neural Network for Linear Regression������������������������������������������������������71
Logistic Regression���������������������������������������������������������������������������������������������73
scikit-learn for Logistic Regression���������������������������������������������������������������74
Keras Neural Network for Logistic Regression����������������������������������������������74
Fashion MNIST Data: Logistic Regression in Keras���������������������������������������77
MLPs on the Iris Data������������������������������������������������������������������������������������������80
Write the Code�����������������������������������������������������������������������������������������������80
Build a Sequential Keras Model���������������������������������������������������������������������81
MLPs on MNIST Data (Digit Classification)����������������������������������������������������������84
MLPs on Randomly Generated Data��������������������������������������������������������������������88

Chapter 6: Convolutional Neural Networks�����������������������������������������91


Different Layers in a CNN������������������������������������������������������������������������������������91
CNN Architectures�����������������������������������������������������������������������������������������������95

Chapter 7: CNN in TensorFlow������������������������������������������������������������97


Why TensorFlow for CNN Models?����������������������������������������������������������������������97
TensorFlow Code for Building an Image Classifier for MNIST Data��������������������98
Using a High-Level API for Building CNN Models����������������������������������������������104

v
Table of Contents

Chapter 8: CNN in Keras�������������������������������������������������������������������105


Building an Image Classifier for MNIST Data in Keras��������������������������������������105
Define the Network Structure����������������������������������������������������������������������107
Define the Model Architecture���������������������������������������������������������������������108
Building an Image Classifier with CIFAR-10 Data���������������������������������������������110
Define the Network Structure����������������������������������������������������������������������111
Define the Model Architecture��������������������������������������������������������������������������112
Pretrained Models���������������������������������������������������������������������������������������������113

Chapter 9: RNN and LSTM�����������������������������������������������������������������115


The Concept of RNNs����������������������������������������������������������������������������������������115
The Concept of LSTM����������������������������������������������������������������������������������������118
Modes of LSTM�������������������������������������������������������������������������������������������������118
Sequence Prediction�����������������������������������������������������������������������������������������119
Sequence Numeric Prediction���������������������������������������������������������������������120
Sequence Classification������������������������������������������������������������������������������120
Sequence Generation����������������������������������������������������������������������������������121
Sequence-to-Sequence Prediction��������������������������������������������������������������121
Time-Series Forecasting with the LSTM Model������������������������������������������������122

Chapter 10: Speech to Text and Vice Versa��������������������������������������127


Speech-to-Text Conversion�������������������������������������������������������������������������������128
Speech as Data�������������������������������������������������������������������������������������������������128
Speech Features: Mapping Speech to a Matrix������������������������������������������������129
Spectrograms: Mapping Speech to an Image���������������������������������������������������131
Building a Classifier for Speech Recognition Through MFCC Features�������������132
Building a Classifier for Speech Recognition Through a Spectrogram�������������133
Open Source Approaches����������������������������������������������������������������������������������135

vi
Table of Contents

Examples Using Each API����������������������������������������������������������������������������������135


Using PocketSphinx�������������������������������������������������������������������������������������135
Using the Google Speech API�����������������������������������������������������������������������136
Using the Google Cloud Speech API�������������������������������������������������������������137
Using the Wit.ai API�������������������������������������������������������������������������������������137
Using the Houndify API��������������������������������������������������������������������������������138
Using the IBM Speech to Text API����������������������������������������������������������������138
Using the Bing Voice Recognition API����������������������������������������������������������139
Text-to-Speech Conversion�������������������������������������������������������������������������������140
Using pyttsx�������������������������������������������������������������������������������������������������140
Using SAPI���������������������������������������������������������������������������������������������������140
Using SpeechLib������������������������������������������������������������������������������������������140
Audio Cutting Code��������������������������������������������������������������������������������������141
Cognitive Service Providers������������������������������������������������������������������������������142
Microsoft Azure�������������������������������������������������������������������������������������������143
Amazon Cognitive Services�������������������������������������������������������������������������143
IBM Watson Services�����������������������������������������������������������������������������������144
The Future of Speech Analytics������������������������������������������������������������������������144

Chapter 11: Developing Chatbots�����������������������������������������������������145


Why Chatbots?��������������������������������������������������������������������������������������������������146
Designs and Functions of Chatbots������������������������������������������������������������������146
Steps for Building a Chatbot�����������������������������������������������������������������������������147
Preprocessing Text and Messages��������������������������������������������������������������148
Chatbot Development Using APIs����������������������������������������������������������������166
Best Practices of Chatbot Development������������������������������������������������������������169
Know the Potential Users����������������������������������������������������������������������������169
Read the User Sentiments and Make the Bot Emotionally Enriching����������169

vii
Table of Contents

Chapter 12: Face Detection and Recognition������������������������������������171


Face Detection, Face Recognition, and Face Analysis��������������������������������������172
OpenCV�������������������������������������������������������������������������������������������������������������172
Eigenfaces���������������������������������������������������������������������������������������������������173
LBPH������������������������������������������������������������������������������������������������������������175
Fisherfaces��������������������������������������������������������������������������������������������������176
Detecting a Face�����������������������������������������������������������������������������������������������177
Tracking the Face����������������������������������������������������������������������������������������������179
Face Recognition����������������������������������������������������������������������������������������������182
Deep Learning–Based Face Recognition����������������������������������������������������������185
Transfer Learning����������������������������������������������������������������������������������������������188
Why Transfer Learning?�������������������������������������������������������������������������������188
Transfer Learning Example��������������������������������������������������������������������������189
Calculate the Transfer Value������������������������������������������������������������������������191
APIs�������������������������������������������������������������������������������������������������������������������197

Appendix 1: Keras Functions for Image Processing�������������������������201

Appendix 2: Some of the Top Image Data Sets Available�����������������207

Appendix 3: Medical Imaging: DICOM File Format���������������������������211


W
 hy DICOM?�����������������������������������������������������������������������������������������������������211
What Is the DICOM File Format?�����������������������������������������������������������������������211

Index�������������������������������������������������������������������������������������������������213

viii
Foreword
Deep Learning has come a really long way. From the birth of the idea to
understand human mind and the concept of associationism — how we
perceive things and how relationships of objects and views influence our
thinking and doing, to the modelling of associationism which started in
the 1870s when Alexander Bain introduced the first concert of Artificial
Neural Networks by grouping the neurons.
Fast forward it to today 2018 and we see how Deep Learning has
dramatically improved and is in all forms of life — from object detection,
speech recognition, machine translation, autonomous vehicles, face
detection and the use of face detection from mundane tasks such as
unlocking your iPhoneX to doing more profound tasks such as crime
detection and prevention.
Convolutional Neural Networks and Recurrent Neural Networks
are shining brightly as they continue to help solve the world problems
in literally all industry areas such as Automotive & Transportation,
Healthcare & Medicine, Retail to name a few. Great progress is being made
in these areas and just metrics like these say enough about the palpability
of the deep learning industry:

–– Number of Computer Science academic papers have soared to almost


10x since 1996

–– VCs are investing 6x more in AI startups since 2000

–– There are 14x more active AI startups since 2000


–– AI related jobs market is hiring 5x more since 2013 and Deep Learning is
the most sought after skill in 2018

ix
Foreword

–– 84% of enterprises believe investing in AI will give them a great competi-


tive edge

And finally,

–– the error rate of image classification has dropped from 28% in 2012 to
2.5% in 2017 and it is going down all the time!

Still the research community is not satisfied. We are pushing


boundaries and I am moving ahead with my peers to develop models
around the bright and shiny Capsule Networks and give Deep Learning
a huge edge. I am not the only one in this battle. It is with great pleasure I
put this foreword for Navin, a respected professional in the Deep Learning
community I have come to know so well.
His book is coming just at the right moment. The industry as well as
learners are in need of practical means to strengthen their knowledge in
Deep Learning and apply in their job.
I am convinced that Navin’s book will give the learners what they need.
TensorFlow is increasingly becoming the market leader and Keras too is
being adopted by professionals to solve difficult problems in computer
vision and NLP (Natural Language Processing). There is no single
company on this planet who isn’t investing in these two application areas.
I look forward to this book being published and will be the first in line
to get it. And my advice to you is: you should too!

x
About the Author
Navin Kumar Manaswi has been developing
AI solutions with the use of cutting-­edge
technologies and sciences related to artificial
intelligence for many years. Having worked for
consulting companies in Malaysia, Singapore,
and the Dubai Smart City project, as well
as his own company, he has developed a
rare mix of skills for delivering end-to-end
artificial intelligence solutions, including
video intelligence, document intelligence, and
human-like chatbots. Currently, he solves B2B problems in the verticals of
healthcare, enterprise applications, industrial IoT, and retail at Symphony
AI Incubator as a deep learning AI architect. With this book, he wants to
democratize the cognitive computing and services for everyone, especially
developers, data scientists, software engineers, database engineers, data
analysts, and C-level managers.

xi
About the Technical Reviewer
Sundar Rajan Raman has more than 14 years
of full stack IT experience in machine
learning, deep learning, and natural language
processing. He has six years of big data
development and architect experience,
including working with Hadoop and
its ecosystems as well as other NoSQL
technologies such as MongoDB and
Cassandra. In fact, he has been the technical
reviewer of several books on these topics.
He is also interested in strategizing using Design Thinking principles
and coaching and mentoring people.

xiii
CHAPTER 1

Basics of TensorFlow
This chapter covers the basics of TensorFlow, the deep learning
framework. Deep learning does a wonderful job in pattern recognition,
especially in the context of images, sound, speech, language, and time-­
series data. With the help of deep learning, you can classify, predict,
cluster, and extract features. Fortunately, in November 2015, Google
released TensorFlow, which has been used in most of Google’s products
such as Google Search, spam detection, speech recognition, Google
Assistant, Google Now, and Google Photos. Explaining the basic
components of TensorFlow is the aim of this chapter.
TensorFlow has a unique ability to perform partial subgraph
computation so as to allow distributed training with the help of
partitioning the neural networks. In other words, TensorFlow allows model
parallelism and data parallelism. TensorFlow provides multiple APIs.
The lowest level API—TensorFlow Core—provides you with complete
programming control.
Note the following important points regarding TensorFlow:

• Its graph is a description of computations.

• Its graph has nodes that are operations.


• It executes computations in a given context of a session.

• A graph must be launched in a session for any


computation.

© Navin Kumar Manaswi 2018 1


N. K. Manaswi, Deep Learning with Applications Using Python,
https://doi.org/10.1007/978-1-4842-3516-4_1
Chapter 1 Basics of TensorFlow

• A session places the graph operations onto devices


such as the CPU and GPU.

• A session provides methods to execute the graph


operations.
For installation, please go to https://www.tensorflow.org/install/.
I will discuss the following topics:

T ensors
Before you jump into the TensorFlow library, let’s get comfortable with
the basic unit of data in TensorFlow. A tensor is a mathematical object
and a generalization of scalars, vectors, and matrices. A tensor can be
represented as a multidimensional array. A tensor of zero rank (order) is
nothing but a scalar. A vector/array is a tensor of rank 1, whereas a

2
Chapter 1 Basics of TensorFlow

matrix is a tensor of rank 2. In short, a tensor can be considered to be an


n-­dimensional array.
Here are some examples of tensors:

• 5: This is a rank 0 tensor; this is a scalar with shape [ ].


• [2.,5., 3.]: This is a rank 1 tensor; this is a vector
with shape [3].

• [[1., 2., 7.], [3., 5., 4.]]: This is a rank 2


tensor; it is a matrix with shape [2, 3].

• [[[1., 2., 3.]], [[7., 8., 9.]]]: This is a rank 3


tensor with shape [2, 1, 3].

Computational Graph and Session


TensorFlow is popular for its TensorFlow Core programs where it has two
main actions.

• Building the computational graph in the construction


phase

• Running the computational graph in the execution


phase

Let’s understand how TensorFlow works.

• Its programs are usually structured into a construction


phase and an execution phase.

• The construction phase assembles a graph that has


nodes (ops/operations) and edges (tensors).

• The execution phase uses a session to execute ops


(operations) in the graph.

3
Chapter 1 Basics of TensorFlow

• The simplest operation is a constant that takes no


inputs but passes outputs to other operations that do
computation.

• An example of an operation is multiplication


(or addition or subtraction that takes two matrices as
input and passes a matrix as output).

• The TensorFlow library has a default graph to which


ops constructors add nodes.

So, the structure of TensorFlow programs has two phases, shown here:

A computational graph is a series of TensorFlow operations arranged


into a graph of nodes.
Let’s look at TensorFlow versus Numpy. In Numpy, if you plan to
multiply two matrices, you create the matrices and multiply them. But in
TensorFlow, you set up a graph (a default graph unless you create another
graph). Next, you need to create variables, placeholders, and constant
values and then create the session and initialize variables. Finally, you feed
that data to placeholders so as to invoke any action.

4
Chapter 1 Basics of TensorFlow

To actually evaluate the nodes, you must run the computational graph
within a session.
A session encapsulates the control and state of the TensorFlow runtime.
The following code creates a Session object:

sess = tf.Session()

It then invokes its run method to run enough of the computational


graph to evaluate node1 and node2.
The computation graph defines the computation. It neither computes
anything nor holds any value. It is meant to define the operations
mentioned in the code. A default graph is created. So, you don’t need to
create it unless you want to create graphs for multiple purposes.
A session allows you to execute graphs or parts of graphs. It allocates
resources (on one or more CPUs or GPUs) for the execution. It holds the
actual values of intermediate results and variables.
The value of a variable, created in TensorFlow, is valid only within
one session. If you try to query the value afterward in a second session,
TensorFlow will raise an error because the variable is not initialized there.
To run any operation, you need to create a session for that graph. The
session will also allocate memory to store the current value of the variable

5
Chapter 1 Basics of TensorFlow

Here is the code to demonstrate:

Constants, Placeholders, and Variables


TensorFlow programs use a tensor data structure to represent all data—
only tensors are passed between operations in the computation graph. You
can think of a TensorFlow tensor as an n-dimensional array or list. A tensor
has a static type, a rank, and a shape. Here the graph produces a constant
result. Variables maintain state across executions of the graph.

6
Chapter 1 Basics of TensorFlow

Generally, you have to deal with many images in deep learning, so you
have to place pixel values for each image and keep iterating over all images.
To train the model, you need to be able to modify the graph to tune
some objects such as weight and bias. In short, variables enable you to
add trainable parameters to a graph. They are constructed with a type and
initial value.
Let’s create a constant in TensorFlow and print it.

Here is the explanation of the previous code in simple terms:

1. Import the tensorflow module and call it tf.

2. Create a constant value (x) and assign it the


numerical value 12.

3. Create a session for computing the values.

4. Run just the variable x and print out its current


value.
The first two steps belong to the construction phase, and the last two
steps belong to the execution phase. I will discuss the construction and
execution phases of TensorFlow now.
You can rewrite the previous code in another way, as shown here:

7
Chapter 1 Basics of TensorFlow

Now you will explore how you create a variable and initialize it. Here is
the code that does it:

Here is the explanation of the previous code:

1. Import the tensorflow module and call it tf.

2. Create a constant value called x and give it the


numerical value 12.

3. Create a variable called y and define it as being the


equation 12+11.

4. Initialize the variables with tf.global_variables_


initializer().

5. Create a session for computing the values.

6. Run the model created in step 4.


7. Run just the variable y and print out its current
value.

Here is some more code for your perusal:

8
Chapter 1 Basics of TensorFlow

Placeholders
A placeholder is a variable that you can feed something to at a later time. It
is meant to accept external inputs. Placeholders can have one or multiple
dimensions, meant for storing n-dimensional arrays.

Here is the explanation of the previous code:

1. Import the tensorflow module and call it tf.

2. Create a placeholder called x, mentioning the


float type.

3. Create a tensor called y that is the operation of


multiplying x by 10 and adding 500 to it. Note that
any initial values for x are not defined.

4. Create a session for computing the values.


5. Define the values of x in feed_dict so as to run y.

6. Print out its value.

In the following example, you create a 2×4 matrix (a 2D array) for


storing some numbers in it. You then use the same operation as before to
do element-wise multiplying by 10 and adding 1 to it. The first dimension
of the placeholder is None, which means any number of rows is allowed.

9
Chapter 1 Basics of TensorFlow

You can also consider a 2D array in place of the 1D array. Here is the
code:

This is a 2×4 matrix. So, if you replace None with 2, you can see the
same output.

But if you create a placeholder of [3, 4] shape (note that you will feed
a 2×4 matrix at a later time), there is an error, as shown here:

10
Chapter 1 Basics of TensorFlow

################# What happens in a linear model ##########


# Weight and Bias as Variables as they are to be tuned
W = tf.Variable([2], dtype=tf.float32)
b = tf.Variable([3], dtype=tf.float32)
# Training dataset that will be fed while training as Placeholders
x = tf.placeholder(tf.float32)
# Linear Model
y = W * x + b

Constants are initialized when you call tf.constant, and their values
can never change. By contrast, variables are not initialized when you call
tf.Variable. To initialize all the variables in a TensorFlow program, you
must explicitly call a special operation as follows.

It is important to realize init is a handle to the TensorFlow subgraph


that initializes all the global variables. Until you call sess.run, the
variables are uninitialized.

11
Chapter 1 Basics of TensorFlow

Creating Tensors
An image is a tensor of the third order where the dimensions belong to
height, width, and number of channels (Red, Blue, and Green).
Here you can see how an image is converted into a tensor:

12
Chapter 1 Basics of TensorFlow

You can generate tensors of various types such as fixed tensors,


random tensors, and sequential tensors.

Fixed Tensors
Here is a fixed tensor:

13
Chapter 1 Basics of TensorFlow

tf:.fill creates a tensor of shape (2×3) having a unique number.

tf.diag creates a diagonal matrix having specified diagonal elements.

tf.constant creates a constant tensor.

Sequence Tensors
tf.range creates a sequence of numbers starting from the specified value
and having a specified increment.

tf.linspace creates a sequence of evenly spaced values.

14
Chapter 1 Basics of TensorFlow

Random Tensors
tf.random_uniform generates random values from uniform distribution
within a range.

tf.random_normal generates random values from the normal


distribution having the specified mean and standard deviation.

15
Chapter 1 Basics of TensorFlow

Can you guess the result?

If you are not able to find the result, please revise the previous portion
where I discuss the creation of tensors.
Here you can see the result:

Working on Matrices
Once you are comfortable creating tensors, you can enjoy working on
matrices (2D tensors).

16
Chapter 1 Basics of TensorFlow

Activation Functions
The idea of an activation function comes from the analysis of how a
neuron works in the human brain (see Figure 1-1). The neuron becomes
active beyond a certain threshold, better known as the activation potential.
It also attempts to put the output into a small range in most cases.
Sigmoid, hyperbolic tangent (tanh), ReLU, and ELU are most popular
activation functions.
Let’s look at the popular activation functions.

17
Chapter 1 Basics of TensorFlow

Tangent Hyperbolic and Sigmoid


Figure 1-2 shows the tangent hyperbolic and sigmoid activation functions.

Figure 1-1. An activation function

Figure 1-2. Two popular activation functions

18
Chapter 1 Basics of TensorFlow

Here is the demo code:

R
 eLU and ELU
Figure 1-3 shows the ReLU and ELU functions.

Figure 1-3. The ReLU and ELU functions

19
Chapter 1 Basics of TensorFlow

Here is the code to produce these functions:

ReLU6
ReLU6 is similar to ReLU except that the output cannot be more than six ever.

Note that tanh is a rescaled logistic sigmoid function.

20
Chapter 1 Basics of TensorFlow

21
Chapter 1 Basics of TensorFlow

Loss Functions
The loss function (cost function) is to be minimized so as to get the best
values for each parameter of the model. For example, you need to get the
best value of the weight (slope) and bias (y-intercept) so as to explain the
target (y) in terms of the predictor (X). The method is to achieve the best
value of the slope, and y-intercept is to minimize the cost function/loss
function/sum of squares. For any model, there are numerous parameters,
and the model structure in prediction or classification is expressed in
terms of the values of the parameters.
You need to evaluate your model, and for that you need to define the
cost function (loss function). The minimization of the loss function can
be the driving force for finding the optimum value of each parameter. For

22
Chapter 1 Basics of TensorFlow

regression/numeric prediction, L1 or L2 can be the useful loss function.


For classification, cross entropy can be the useful loss function. Softmax or
sigmoid cross entropy can be quite popular loss functions.

Loss Function Examples


Here is the code to demonstrate:

Common Loss Functions


The following is a list of the most common loss functions:

tf.contrib.losses.absolute_difference

tf.contrib.losses.add_loss

23
Chapter 1 Basics of TensorFlow

tf.contrib.losses.hinge_loss

tf.contrib.losses.compute_weighted_loss

tf.contrib.losses.cosine_distance

tf.contrib.losses.get_losses

tf.contrib.losses.get_regularization_losses

tf.contrib.losses.get_total_loss

tf.contrib.losses.log_loss

tf.contrib.losses.mean_pairwise_squared_error

tf.contrib.losses.mean_squared_error

tf.contrib.losses.sigmoid_cross_entropy

tf.contrib.losses.softmax_cross_entropy

tf.contrib.losses.sparse_softmax_cross_entropy

tf.contrib.losses.log(predictions,labels,weight=2.0)

24
Chapter 1 Basics of TensorFlow

Optimizers
Now you should be convinced that you need to use a loss function to
get the best value of each parameter of the model. How can you get the
best value?
Initially you assume the initial values of weight and bias for the model
(linear regression, etc.). Now you need to find the way to reach to the
best value of the parameters. The optimizer is the way to reach the best
value of the parameters. In each iteration, the value changes in a direction
suggested by the optimizer. Suppose you have 16 weight values (w1, w2,
w3, …, w16) and 4 biases (b1, b2, b3, b4). Initially you can assume every
weight and bias to be zero (or one or any number). The optimizer suggests
whether w1 (and other parameters) should increase or decrease in the
next iteration while keeping the goal of minimization in mind. After many
iterations, w1 (and other parameters) would stabilize to the best value
(or values) of parameters.
In other words, TensorFlow, and every other deep learning framework,
provides optimizers that slowly change each parameter in order to
minimize the loss function. The purpose of the optimizers is to give
direction to the weight and bias for the change in the next iteration.
Assume that you have 64 weights and 16 biases; you try to change the
weight and bias values in each iteration (during backpropagation) so that
you get the correct values of weights and biases after many iterations while
trying to minimize the loss function.
Selecting the best optimizer for the model to converge fast and to learn
weights and biases properly is a tricky task.
Adaptive techniques (adadelta, adagrad, etc.) are good optimizers
for converging faster for complex neural networks. Adam is supposedly
the best optimizer for most cases. It also outperforms other adaptive
techniques (adadelta, adagrad, etc.), but it is computationally costly. For
sparse data sets, methods such as SGD, NAG, and momentum are not the
best options; the adaptive learning rate methods are. An additional benefit

25
Chapter 1 Basics of TensorFlow

is that you won’t need to adjust the learning rate but can likely achieve the
best results with the default value.

Loss Function Examples


Here is the code to demonstrate:

26
Chapter 1 Basics of TensorFlow

Common Optimizers
The following is a list of common optimizers:

27
Chapter 1 Basics of TensorFlow

Metrics
Having learned some ways to build a model, it is time to evaluate the
model. So, you need to evaluate the regressor or classifier.
There are many evaluation metrics, among which classification
accuracy, logarithmic loss, and area under ROC curve are the most popular
ones.
Classification accuracy is the ratio of the number of correct predictions
to the number of all predictions. When observations for each class are not
much skewed, accuracy can be considered as a good metric.

tf.contrib.metrics.accuracy(actual_labels, predictions)

There are other evaluation metrics as well.

Metrics Examples
This section shows the code to demonstrate.
Here you create actual values (calling them x) and predicted values
(calling them y). Then you check the accuracy. Accuracy represents the
ratio of the number of times the actual equals the predicted values and
total number of instances.

28
Chapter 1 Basics of TensorFlow

Common Metrics
The following is a list of common metrics:

29
Chapter 1 Basics of TensorFlow

30
CHAPTER 2

Understanding and
Working with Keras
Keras is a compact and easy-to-learn high-level Python library for deep
learning that can run on top of TensorFlow (or Theano or CNTK). It
allows developers to focus on the main concepts of deep learning, such
as creating layers for neural networks, while taking care of the nitty-gritty
details of tensors, their shapes, and their mathematical details. TensorFlow
(or Theano or CNTK) has to be the back end for Keras. You can use Keras
for deep learning applications without interacting with the relatively
complex TensorFlow (or Theano or CNTK). There are two major kinds
of framework: the sequential API and the functional API. The sequential
API is based on the idea of a sequence of layers; this is the most common
usage of Keras and the easiest part of Keras. The sequential model can be
considered as a linear stack of layers.
In short, you create a sequential model where you can easily add
layers, and each layer can have convolution, max pooling, activation, drop-­
out, and batch normalization. Let’s go through major steps to develop
deep learning models in Keras.

© Navin Kumar Manaswi 2018 31


N. K. Manaswi, Deep Learning with Applications Using Python,
https://doi.org/10.1007/978-1-4842-3516-4_2
Chapter 2 Understanding and Working with Keras

Major Steps to Deep Learning Models


The four core parts of deep learning models in Keras are as follows:

1. Define the model. Here you create a sequential


model and add layers. Each layer can contain one
or more convolution, pooling, batch normalization,
and activation function.

2. Compile the model. Here you apply the loss


function and optimizer before calling the compile()
function on the model.

3. Fit the model with training data. Here you train the
model on the test data by calling the fit() function
on the model.

4. Make predictions. Here you use the model to


generate predictions on new data by calling
functions such as evaluate() and predict().

There are eight steps to the deep learning process in Keras:

1. Load the data.

2. Preprocess the data.

3. Define the model.

4. Compile the model.

5. Fit the model.

6. Evaluate the model.

7. Make the predictions.


8. Save the model.

32
Chapter 2 Understanding and Working with Keras

Load Data
Here is how you load data:

Preprocess the Data


Here is how you preprocess data:

33
Chapter 2 Understanding and Working with Keras

D
 efine the Model
Sequential models in Keras are defined as a sequence of layers. You
create a sequential model and then add layers. You need to ensure the
input layer has the right number of inputs. Assume that you have 3,072
input variables; then you need to create the first hidden layer with 512
nodes/neurons. In the second hidden layer, you have 120 nodes/neurons.
Finally, you have ten nodes in the output layer. For example, an image
maps onto ten nodes that shows the probability of being label1 (airplane),
label2 (automobile), label3 (cat), …, label10 (truck). The node of highest
probability is the predicted class/label.

One image has three channels (RGB), and in each channel, the
image has 32×32 = 1024 pixels. So, each image has 3×1024 = 3072 pixels
(features/X/inputs).
With the help of 3,072 features, you need to predict the probability of
label1 (Digit 0), label2 (Digit 1), and so on. This means the model predicts
ten outputs (Digits 0–9) where each output represents the probability of
the corresponding label. The last activation function (sigmoid, as shown
earlier) gives 0 for nine outputs and 1 for only one output. That label is the
predicted class for the image (Figure 2-1).
For example, 3,072 features ➤ 512 nodes ➤ 120 nodes ➤ 10 nodes.

34
Chapter 2 Understanding and Working with Keras

Figure 2-1. Defining the model

The next question is, how do you know the number of layers to use and
their types? No one has the exact answer. What’s best for evaluation metrics is
that you decide the optimum number of layers and the parameters and steps
in each layer. A heuristics approach is also used. The best network structure
is found through a process of trial-and-error experimentation. Generally, you
need a network large enough to capture the structure of the problem.

35
Chapter 2 Understanding and Working with Keras

In this example, you will use a fully connected network structure with
three layers. A dense class defines fully connected layers.
In this case, you initialize the network weights to a small random
number generated from a uniform distribution (uniform) in this
case between 0 and 0.05 because that is the default uniform weight
initialization in Keras. Another traditional alternative would be normal for
small random numbers generated from a Gaussian distribution. You use or
snap to a hard classification of either class with a default threshold of 0.5.
You can piece it all together by adding each layer.

Compile the Model


Having defined the model in terms of layers, you need to declare the loss
function, the optimizer, and the evaluation metrics. When the model is
proposed, the initial weight and bias values are assumed to be 0 or 1, a
random normally distributed number, or any other convenient numbers.
But the initial values are not the best values for the model. This means the
initial values of weight and bias are not able to explain the target/label in
terms of predictors (Xs). So, you want to get the optimal value for the model.
The journey from initial values to optimal values needs a motivation, which
will minimize the cost function/loss function. The journey needs a path
(change in each iteration), which is suggested by the optimizer. The journey
also needs an evaluation measurement, or evaluation metrics.

Popular loss functions are binary cross entropy, categorical cross


entropy, mean_squared_logarithmic_error and hinge loss. Popular
optimizers are stochastic gradient descent (SGD), RMSProp, adam,
adagrad, and adadelta. Popular evaluation metrics are accuracy, recall,
and F1 score.
36
Chapter 2 Understanding and Working with Keras

In short, this step is aimed at tuning the weights and biases based on
loss functions through iterations based on the optimizer evaluated by
metrics such as accuracy.

Fit the Model


Having defined and compiled the model, you need to make predications
by executing the model on some data. Here you need to specify the
epochs; these are the number of iterations for the training process to run
through the data set and the batch size, which is the number of instances
that are evaluated before a weight update. For this problem, the program
will run for a small number of epochs (10), and in each epoch, it will
complete 50(=50,000/1,000) iterations where the batch size is 1,000 and the
training data set has 50,000 instances/images. Again, there is no hard rule
to select the batch size. But it should not be very small, and it should be
much less than the size of the training data set to consume less memory.

37
Another Random Scribd Document
with Unrelated Content
"Se todistaa sairaloista mieltä. Teidän pitäisi vastustaa sellaista
tunnetta, sensijaan, että Te nyt sitä suositte", sanoi hän tavattoman
varmalla äänellä.

Anna taisteli sydämessään, epävarmana sanoisiko enemmän, vai


lopettaisiko keskustelun. Hän käsitti, että Henning moitti häntä ja
ymmärsi häntä vaan puolittain. Tämä kiusasi häntä, mutta toiselta
puolen oli hän sanonut mielestään jo liiaksi. Mitä oli Henningillä
oikeastaan hänen kanssaan tekemistä? Ennenkuin Anna oli ehtinyt
tehdä päätöstään, puhui Henning taas, mutta nyt paljon
lempeämmällä äänellä, kuin äsken.

"Antakaa anteeksi, jos minun sanani loukkasivat Teitä, mutta se ei


ollut tarkoitukseni. Minulla olisi vielä vähän enemmän sanottavaa,
mutta Te olette kenties jo niin suuttunut minuun, ettette tahdo
kuunnella puhettani?"

"En minä ole suuttunut. Puhukaa vaan", sanoi hän, ja Henning


jatkoi:

"Minä aijoin sanoa, että minusta tuntuu ikäänkuin Teidän


itsekidutuksenne kulkisi aivan väärään suuntaan. Unhottakaa itsenne
ja ajatelkaa omaistenne hauskuutta. Hillitkää raskasmielisyyttänne
esimerkiksi tuon luonnollisen ja aivan luvallisen ruokahalun suhteen.
Minä näin eilen, että kun Eva (hän on nukkunut tuonne sohvaan,
pikku nypykkä) tuli ja kietoi kätensä ympärillenne tahtoen hyväillä
Teitä, työnsitte Te kylmästi hänet luotanne, sen sijaan, että Teidän
olisi pitänyt osoittaa hänelle ystävällisyyttä. Vaikka ette pidäkkään
hyväilemisistä, olisi Teidän sisarenne tähden pitänyt pakottaa
itseänne. Teidän pitäisi koettaa olla huomaavaisempi ja
ystävällisempi omaisianne kohtaan."
"Ei ole helppoa täyttää kaikkea tuota", huomautti Anna katkerasti.

"Ei, kyllä se on paljon vaikeampaa, kuin itsekidutukset, joita Te


harjoitatte, mutta Te saisitte nähdä paljon parempia tuloksia",
vastasi Henning melkein ankarasti ja nousi ylös.

Kädet taskuissa meni hän ja asettui Evan eteen, joka oli nukkunut
sohvannurkkaan, nukke sylissään. Ulkona vallitseva heikko
päivänhämy laskeutui ikkunasta hänen kasvoilleen, hänen
maatessaan siinä lapsellisen vapaassa asennossaan. Pieni kiharainen
pää oli vaipunut alas sohvansyrjälle. Posken lämmin väri näkyi
vaaleain silkinhienoisten hiuksien läpi, jotka sitä peittivät. Punaiset
huulet olivat raollaan ja hengitys kävi tyynesti ja tasaisesti. Pitkät
tummat silmäripset muodostivat kauniin vastakohdan vaaleille
silmäluomille.

Henning katseli häntä mieltymyksellä. Anna vuorostaan tarkasti


Henningiä. Hän tunsi, että tämä teki vertauksia hänen ja sisarensa
välillä, ja hän tiesi hyvin, että hän tässä vertailussa jäisi kauas
syrjään. Hän nousi äkkiä ja aikoi lähteä. Silloin kääntyi Henning.

"Neiti Anna, antakaa minulle anteeksi", kuuli hän hänen sanovan


ja pysähtyi, puolittain vasten tahtoaan. "Antakaa anteeksi mitä minä
äsken sanoin! Ehkä olen arvostellut Teitä aivan väärin; minähän
tiedän teistä niin vähän ja niistä vaikeuksista, joita vastaan te
taistelette."

Anna taisteli hetkisen sydämessään. Hän oli pahoillaan, että


Henning oli uskaltanut moittia juuri sitä, joka hänen mielestään oli
kehuttavaa; mutta toiselta puolen täytyi hänen oikeudentuntonsa
myöntää, että Henning oli oikeammassa kuin hän itse.
"Ei Teidän tarvitse pyytää anteeksi, Te osuitte valitettavasti
oikeaan", vastasi hän lyhyesti.

"Jos olen sanonut totuuden, niin antakaa sekin minulle anteeksi",


pyysi hän kunnioittavasti. "Olen vielä aivan liian vieras, ollakseni
oikeutettu sanomaan Teille katkeria totuuksia."

Anna loi häneen hätäisen katseen. Hänen oli mahdoton olla


kauemmin pahoillaan. Henningin käytös riisti häneltä kaikki aseet ja
antoi voimaa hänen sanoilleen. Ne antoivat räikeän valon hänen
menettelytavalleen, ja hänen täytyi sydämessään myöntää, että hän
oli antautunut väärälle tielle.

"Te pyydätte anteeksi sitä, josta minun tulisi kiittää teitä", sanoi
hän lempeämmällä äänellä, jossa kuitenkin saattoi huomata hieman
katkeran vivahduksen.

Hän kiiruhti omaan huoneeseensa ja vietti yksinäisyydessä


nöyryyttävän mutta terveellisen hetken tutkien itseään Jumalan
edessä.

Henning seisoi hetkisen miettiväisenä paikalla, mihin Anna oli


hänet jättänyt. Silloin kuului sohvalta pieni uninen ääni kysyvän,
kuinka paljon kello on.

"Vai niin, oletko sinä herännyt, pikku nypykkä", sanoi hän ja meni
Evan luo, joka istui ja hieroi unta silmistään.

Hän istuutui hänen viereensä ja jutteli, niin että tyttönen pian oli
täysin hereillä.
14.

Anna suoritti syksyllä loistavasti sisäänpääsytutkinnon seminaariin


ja pian pidettiin häntä etevimpänä osastollaan. Säännölliset opinnot
huvittivat häntä, ja toverielämä, joka oli hänelle aivan uutta, virkisti
hänen mieltänsä. Ilokseen huomasi hän tulleensa ilmapiiriin, jossa
ulkomuoto merkitsi paljon vähemmän kuin lahjakkaisuus. Työn
kautta muuttui hän suuresti edukseen. Jo Vesterlångassa,
enimmäkseen keskustelunsa johdosta Henning Svenniuksen kanssa,
oli hän huomannut kieltäymys-pyrkimystensä väärän suunnan ja
hyljännyt sen. Sen sijaan koetti hän nyt olla iloinen ja ystävällinen.
Tämä oli kuitenkin vaikeata ympäristössä, joka ei koskaan ollut
nähnyt häntä muuta kuin tylynä ja jurona; mutta seminaarissa, jossa
ei kukaan tuntenut häntä, kävi se helpommin.

Hän oli täysihoidossa isänsä ainoan sisaren, rouva Constanse


Holmin luona, joka oli lapseton leski ja hyväntahtoisin ihminen, mitä
voi ajatella. Tuo kunnon mummo asui pienessä somassa asunnossa
yhdessä uskollisen palvelijansa Liinan ja kanarialintunsa kanssa.
Anna ei ollut asunut monta päivää tätinsä luona, kun hän oli yhtä
suuri suosikki kuin Pippikin, ja se ei ollut vähän se.

Uudenvuoden aikana tuli Dagmar Rencrona vanhempiensa kanssa


Tukholmaan muutamaksi kuukaudeksi; mutta entiset lukutoverit
tapasivat toisiaan harvoin. Toinen oli kiinni työssään, toinen
huvituksissaan, niin että heillä harvoin oli aikaa toinen toisilleen.

Kurt tuli toisinaan sunnuntaiksi Tukholmaan ja asui silloin tädin


luona. Jos tämä vanha rouva piti paljon veljensä tyttärestä, niin piti
hän vielä enemmän veljensä pojasta. Tämä oli ruvennut
julkaisemaan runoja ja kirjoittamaan sanomalehtiin ja kalentereihin,
ja oli jo saavuttanut jonkun verran tunnustusta alkuperäisyydellään
ja todellakin suurella lahjakkaisuudellaan. Tämän yhteydessä teki
hänen komea ulkomuotonsa ja hyvät seurustelulahjansa hänet
kernaasti nähdyksi vieraaksi monessa ylhäisessä perheessä, muiden
muassa parooni Rencronan luona. Sinne menikin hän mielellään.

Anna ihmetteli Kurtin levottomuutta, kun hän kerran sivumennen


mainitsi, että hänen ja Dagmarin välinen ystävyys oli viime aikoina
laimentunut. Jos hän olisi ollut kokeneempi ja tarkkanäköisempi, olisi
hän sen johdosta tehnyt johtopäätöksiä; mutta nyt hän ei epäillyt
mitään.

Dagmar oli juuri täydessä, vastakehittyneessä nuoruuden-


kukoistuksessaan. Ylhäisen, komean ryhtinsä tähden näytti hän
pitemmältä kuin oikeastaan olikaan. Hänen käytöksensä oli
harvinaisen vapaata ja miellyttävää. Kurtille oli hän usein
ystävällinen, toisinaan tuttavallinen. Hänen mielenpurkauksiaan
kuunteli Dagmar aina harrastuksella, vaikka hän toisinaan ilveilikin
hänen kanssaan. Tuo nuori haaveilija meni sokeasti vaaraan. Hänen
runoilija-mielikuvituksessaan oli tuon nuoren tytön sielu yhtä
sopusointuisen ihana ja täydellinen, kuin hänen ulkomuotonsakin.
Hän kiintyi koko lämpimän, intohimoisen sydämensä voimalla
häneen, eikä huomannut rakastavansa ihannetta, joka vaan oli
olemassa hänen mielikuvituksessaan ja joka oli lainannut Dagmar
Rencronan viehkeän muodon.

Kurt ei tavannut Dagmaria usein; ja kenties tämä juuri sen vuoksi


olikin tullut niin ihanteelliseksi hänen mielestään. Saattoi kyllä
tapahtua, heidän ollessaan yhdessä, että Kurtin hehku äkkiä jäähtyi
ja hänen ihailunsa laimeni jonkun Dagmarin teon taikka puheen
johdosta; mutta tällaiset vaikutteet menivät pian ohi. Kun he taas
olivat erillään toisistaan, loisti Kurtin mielessä uudestaan tuo suuresti
rakastettu ihannekuva.

Vähitellen tuli hän täysin tietoiseksi rakkaudestaan, mutta sitten


rupesi hän tarkastamaan häntä ja antamaan erityisen merkityksen
jokaiselle hänen sanalleen ja katseelleen. Tämä karkoitti sen
onnellisen levon, jossa nuoren miehen rakkaus ensin oli versonut.
Hän rupesi häilymään toivon ja epäilyn välillä.

Siten kului talvi.

Keväällä muutti Rencronan perhe maatilalleen Bergsjöholmaan.


Lukukauden loputtua saivat Anna ja Kurt ystävällisen kutsun saapua
sinne muutamaksi päiväksi, ennen kuin he matkustavat kotiinsa
Vesterlångaan.

Kurt riemuitsi, mutta Anna epäili. Häntä ei ollenkaan haluttanut


mennä sinne. Kurt sai hänet kuitenkin vihdoin taipumaan,
selittämällä ettei hän voinut olla menemättä olematta suurimmassa
määrässä epäystävällinen.

Dagmar oli pelkkää päivänpaistetta, ja Kurtin aika kului ikäänkuin


onnellisessa unessa, jonka hän olisi suonut ijäti kestävän.

Dagmar oli innokas ratsastaja ja vaikkei Kurt ollutkaan saavuttanut


suurempaa taitavuutta ratsastus-urheilussa, osasi hän kumminkin
tyynellä ja varmalla kädellä ohjata tulisintakin hevosta, jonka vuoksi
he molemmat seurasivat parooni Rencronaa hänen
aamuratsastuksillaan.

Kurt ei koskaan unohtanut, kuinka ihanaa oli saada nelistää tuon


nuoren tytön vieressä läpi kasteraikkaan metsän. Aurinko paistoi
viheriäisille lehdille ja vastapuhjenneille vuokoille. Tuuli puhalsi
viileänä ja raittiina järveltä, ja lintujen laulu kaikui läheltä ja kaukaa.
Kaikki tämä muodosti kuitenkin vaan kehyksen Dagmarin ympärille
joka ratsasti hänen vieressään, säteillen nuoruutta ja kauneutta.

Kurt mietti, olikohan hänellä aavistustakaan siitä, kuinka suuresti


hän oli rakastettu. Dagmar ei saattanut olla epätietoinen niistä
tunteista, jotka liikkuivat tuon nuoren miehen sydämessä — ne olivat
silminnähtävät — mutta hän ei käsittänyt niiden arvoa. Hänen
mielensä oli vielä liian pintapuolinen, voidakseen käsittää niiden
syvyyttä.

Myötätuntoisuus, jota Dagmar hänelle osoitti, ei kuitenkaan ollut


teeskenneltyä. Hän ei läheskään ollut tunteeton Kurtin miehekkään
ulkomuodon suhteen, eikä hänen kuuluisuutensa suhteen, jonka hän
jo nuorena oli onnistunut hankkimaan itselleen, eikä varsinkaan sen
vilpittömän suosion suhteen, jota Kurt hänelle osoitti.

Eräänä aamuna, heidän kulkiessaan eteenpäin kapeaa metsätietä,


ratsasti Kurt hänen edellään, niin että hän häiritsemättä saattoi
katsella häntä hänen huomaamattaan. Kurt istui eteenpäin
kumartuneena ja näytti Dagmarin mielestä kömpelöltä
huolimattomassa asennossaan. Hänestä oli sääli, ettei hän ollut
ryhdikkäämpi.

"Miksi ei kandidaatti ruvennut luutnantiksi?"

Tällä kysymyksellä lopetti hän ääneensä hiljaiset mietelmänsä.

"Minkätähden olisi minun pitänyt ruveta luutnantiksi?" kysyi Kurt


hämmästyneenä.
"Sotilaspuku sopisi Teille ja Teidän pitäisi saada vähän parempi
ryhti", vastasi hän suulaasti.

Loukatun itserakkauden heikko puna levisi Kurtin poskille. Hän loi


tutkivan katseen ilkkuvaan tyttöön huomatakseen, puhuiko tämä
täyttä totta, mutta ei saanut hänestä selvää. Hän katseli
huolettomasti metsään päin.

"Tuo hupakko", sanoi hänen isänsä tyytyväisesti naurahtaen, "hän


ihailee sotilaita, kuten kaikki naiset! Uskokaa minua, sankarillisella
ryhdillä ja miekalla ja pistoolilla valloitetaan parhaiten tytönsydän.
Eikö niin, Dagmar?"

"Isä lörpöttelee", vastasi tämä ja hymyili leppyisesti Kurtille, joka


tarkasteli häntä synkin katsein.

"Arvosteletteko Te ihmisiä heidän ulkomuotonsa mukaan, Dagmar-


neiti?" kysyi hän.

"En, mutta en voi sille mitään, että näen senkin", vastasi hän ja
sivalsi hevostaan, joka heti rupesi nelistämään.

He olivat tulleet leveämmälle tielle ja ratsastivat rinnakkain.

Parooni kannusti hevostaan ja ajoi tyttärensä jälessä.

Kurt seurasi heitä synkkänä.

"Ajatteletteko Te, että miehen, valitessaan elämänuraa, tulisi


ajatella sitä — jos siten saan sanoa — mikä pukee häntä parhaiten?"
kysyi Kurt ja katseli Dagmaria ikäänkuin hänen vastauksestaan olisi
riippunut elämä.
"Te otatte kaikki asiat niin syvältä kannalta", vastasi tyttö
leikitellen. Huomattuaan, ettei tämä vastaus läheskään tyydyttänyt
Kurttia, lisäsi hän:

"Tietysti täytyy miehen ajatella, mille alalle hän parhaiten sopii ja


mikä toimi on omiaan kehittämään hänen parhaimpia
ominaisuuksiaan."

"Pikku diplomaatti", mutisi parooni partaansa.

Kurt veti helpoituksen huokauksen.

"Te ette siis tarkoittanut niin pintapuolisesti, kuin ensin olisi voinut
luulla", sanoi hän.

"Te uskotte minusta aina pahinta", sanoi Dagmar leikillisesti ja


tekeytyi kärsivän näköiseksi.

Nämä sanat haihduttivat kokonaan Kurtin alakuloisuuden ja


Dagmar oli tyytyväinen. Hänelle tuotti huvia tuntea voimansa ja
nähdä, miten hän voi työntää hänet pois ja mielensä mukaan vetää
taas takaisin.

15.

Kului vuosi. Oli syksy. Koleana marraskuun iltana paloi Annan


huoneessa miellyttävä takkavalkea. Itse istui hän sen edessä
lämmittelemässä, Kurtin seisoessa ikkunan edessä ja katsellessa
kadulle, joka tuntui hänestä tavattoman ikävältä. Puodit olivat
suljetut, sillä oli sunnuntai. Satoi hiljaista vihmasadetta, joka pakotti
kulkijat levittämään sateenvarjonsa ja kävelemään varovasti
likaisella, liukkaalla kivityksellä.

Kirkonkellot kutsuivat iltajumalanpalvelukseen. Niiden juhlallinen


sointu ei vaikuttanut ylentävästi Kurttiin, vaan alensi hänen
elämänhaluaan vieläkin asteen. Ne kaikuivat kuin hautauskellot
hänen korvissaan.

"Milloin sanoit hänen matkustavan?" kysyi hän, jatkaen puheluaan


sisarensa kanssa.

"Tiistai illalla", vastasi tämä.

"Ja viipyy poissa kokonaisen vuoden?" kysyi Kurt edelleen.

"Niin hän arveli."

"Luuletko sinä…?" alotti Kurt, mutta pysähtyi.

"Mitä?" kysyi Anna.

"Niin, minä ajattelin vaan, että minun pitäisi sanoa hänelle hyvästi
jollakin tavalla, olisihan epäkohteliasta, ellen sitä tekisi, mutta
voisinkohan minä mennä heille?"

"Dagmar lupasi tulla jonakuna iltana tänne jäähyväisille. Ehkä hän


tulee tänään, hän tietää että minä sunnuntaisin olen vapaampi."

Samalla soi eteisen kello ja molemmat sisarukset kuuntelivat


odotellen.

"Onko Anna-neiti kotona?" kysyi kirkas ja nuorekas ääni, joka


sähköiskun tavoin tunkeutui Kurtin sydämeen ja ajoi veren hänen
poskilleen.
Anna kiiruhti ulos ja astui heti taas sisään Dagmarin kanssa, joka
puheli vilkkaasti, mutta lakkasi äkkiä nähdessään Kurtin.

"Kas, kandidaatti! Sitä en odottanut", sanoi hän hillityllä äänellä ja


vähän hämillään, joka soveltui hänelle erinomaisesti. Kurt kumarsi
vaijeten.

Keskustelu ei tahtonut oikein päästä alkuun. Dagmar ei ollut


entisensä kaltainen. Hänen käytöksessään, joka tavallisesti oli
itsetietoisen vapaata, oli nyt jonkinlaista ujoutta. Puhuttiin aijotusta
matkasta. Dagmar tulisi ensin olemaan jonkun aikaa Pariisissa, sitten
matkustaisi hän Rivieraan ja Italiaan ja pysähtyisi kotimatkalla
vähäksi aikaa Sveitsiin ja Saksaan.

"Kuinka sinä olet onnellinen!" huudahti Anna ja tukahutti


huokauksensa.

"Jospa saisin ottaa sinut mukaani", sanoi Dagmar ja nojautui


hyväillen ystävänsä puoleen.

"Minä en ole sentään oikein iloinen, tuntuu niin tyhjältä, kun


täytyy jättää kaikki tänne kotiin. Minä en pidä jäähyväisistä."

"Kukahan niistä pitäisi?" sanoi Kurt vakaumuksen lämmöllä, luoden


Dagmariin katseen, joka sai tämän punastumaan.

Hän kääntyi Annan puoleen.

"Sinä haluaisit varmaankin matkustaa", sanoi hän niin hellällä


äänellä, ettei se oikein sopinut yhteen noiden jokapäiväisten sanojen
kanssa.
"Niin, koko elämäni ajan olen minä halunnut matkustaa", vastasi
Anna pidätetyllä innolla, "mutta minä tiedän, etten koskaan saa
tyydyttää tätä haluani."

Dagmar tarkasteli häntä pitkällä, tutkivalla katseella. Tuntui, kuin


olisi hän nyt vasta huomannut heidän elämänsuhteittensa suuren
eroavaisuuden.

"Minä en ole juuri koskaan ehtinyt haluamaan", sanoi hän


ikäänkuin vertaillen, "minä olen aina tietänyt, että saisin matkustaa,
tultuani noin kahdenkymmenen ikään. Olosuhteet ovat todellakin
vähän väärin jaetut."

"Vähän!" oli Anna huudahtamaisillaan, mutta vaikeni.

Hetken aikaa olivat kaikki ääneti.

"Miksi ei kandidaatti sano sanaakaan?" kysyi Dagmar vihdoin


hieman kärsimättömänä, kun hiljaisuus rupesi tuntumaan
painostavalta.

Kurt havahtui haaveilustaan ja haki puheenaihetta. Sateen rapina


ruutua vasten näytti antavan hänelle yllykettä.

"Että neiti uskalsi lähteä tänne tällaisessa ilmassa", ihmetteli hän.

Dagmar purskahti heläjävään nauruun. Nyt oli hän taas


entisellään, lumous oli haihtunut.

"Jos meillä ei ole mistään muusta puhuttavaa, kuin ilmasta ja


sateesta, niin on kai paras, että lähden pois", sanoi hän nousten
ylös.
Kurt punastui ja puri huultaan vihoissaan kömpelön
saamattomuutensa tähden.

Dagmar meni Constanse-tädin luo sanomaan jäähyväisiä. Kun hän


sitten aikoi lähteä, pyysi Kurt saada saattaa häntä.

"Jos aijotte olla yhtä huvittava kotimatkalla, kuin tähänkin asti


olette ollut, niin…" sanoi tyttö veitikkamaisesti.

"Niin ette huoli seurastani", jatkoi Kurt koettaen hymyillä.

"Kyllä kai minun täytyy huolia", sanoi Dagmar, "mutta tuletteko te


todellakin näin tarpeettomasti tällaiseen ilmaan?"

"Ei se ole tarpeettomasti", sanoi Kurt tyynesti ja otti


päällystakkinsa.

Kun he lähestyivät Dagmarin porttia, sanoi hän:

"Te olette laskenut leikkiä minun harvasanaisuuteni tähden,


Dagmar-neiti, mutta voi se olla kaunopuheliaskin, jos Te vaan
tahtoisitte ymmärtää sitä. Toisinaan olemme me vaiti, kun emme voi,
emmekä saa ilmaista sitä, mikä on sydämellämme."

"Te puhutte niin surullisesti", sanoi Dagmar epävarmalla äänellä.

"Enhän voi olla iloinen, kun en tiedä, onko minulla pienintäkään


oikeutta toivoa menestystä sydämeni hartaimmalle toiveelle", sanoi
hän liikutettuna ja hänen katseestaan saattoi selvään huomata, mikä
tämä toive oli.

He olivat perillä ja Dagmar oli astunut pari askelta ovelleen


johtavia rappuja. Hän seisoi selkä Kurttiin päin epätietoisena mitä
vastaisi, mutta kääntyi äkkiä ja ojensi hänelle kätensä, kostein
silmin.

"Vuoden perästä… Odottakaa…" änkytti hän, mutta kiiruhti


hämmästyneenä pois, ennen kuin Kurt ehti vastata.

Ehdittyään huoneeseensa, huimasi hänen päätänsä. Mitä oli hän


tehnyt? Oliko hän luvannut jotakin, jota hänen täytyi pitää? Kurtin
ääni oli ollut niin surullinen, hänen katseensa niin vilpitön, ja hän oli
ollut niin kaunis. Syvä rakkaus, joka häntä innostutti, oli aateloinut
hänet. Sinä hetkenä, jona he erosivat, ei hän mistään hinnasta olisi
voinut työntää häntä pois. Mutta sitoa itseään — ei, sitä ei hän
tahtonut, eikä hän sitä varmaankaan ollut tehnytkään? Hän oli
pyytänyt tuota toista odottamaan vuoden, mutta ei ollut luvannut
mitään.

Vuosi eteenpäin tuntuu niin pitkältä, kun on nuori. Paljon voi sen
kuluessa tapahtua. Dagmarin mielestä oli romantillista lähteä
suureen, loistavaan maailmaan ja tietää, että täällä kotona sykkii
hänelle uskollinen, rakastava miehensydän. Palatessaan saisi sitten
nähdä mitä hän tahtoisi; vielä ei hän sitä tietänyt, tulevaisuus oli
vielä rusohohteisen sumun peitossa. Sen takaa odotti hän onneaan,
suurempaa, kuin kenenkään muun. Kurthan oli vaan tavallinen
kuolevainen, ei suinkaan hän voinut tuottaa hänelle tuota onnea,
mutta hän saisi joka tapauksessa olla sen todistajana, muuten se ei
tulisi läheskään täydelliseksi, eikä Dagmar mitenkään tahtonut, että
Kurt olisi unohtanut hänet.

On helppo tehdä työtä, kun on päämäärä, mihin pyrkiä; se antaa


voimaa taistelussa säilyttääksemme ajatuksemme ja tunteemme
puhtaina, kun meillä on rakastettu olento, jonka arvoinen haluamme
olla, sellaiset olivat Kurtin tunteet sinä vuotena, joka seurasi
Dagmarin poislähtöä. Synkät ajatus-epäilyt eivät raastaneet enää
hänen sieluansa, jossa nyt asui valoisat tulevaisuuden toiveet. Hän
oli pyytänyt hänen odottamaan vuoden, silloin tulisi hän takaisin,
silloin kuuntelisi hän häntä ja tulisi hänen omakseen, siten oli hän
käsittänyt hänen sanansa. Vuosi kuluu pian — ja sitten!

Hän luki ahkerasti, eikä käynyt missään huvituksissa.


Joutoaikoinaan istui hän ja haaveili ja kirjoitti runoja Dagmarin kuva
edessään. Se oli kokokuva otettuna selkä katsojaan päin, mutta hän
käänsi kuitenkin kasvonsa häneen päin, niin että suuret hymyilevät
silmät, nenän ylevä muoto ja posken hieno pyöreys tulivat näkyviin.
Tämä kuva kuvasi aivan Dagmarin luonnetta, se oli yhtaikaa sekä
houkutteleva että luotaan sysäävä.

Kurt saattoi istua pitkät ajat ja ihailla tuon kauniin pään jaloa
muotoa ja reipasta ryhtiä ja kapean, pyöreän kaulan hienoja
piirteitä. Siinä oli kaikki niin harvinaisen sopusuhtaista.

Tietämättään lainasi tämä suloinen olento leimansa hänen


runoihinsa. Kun ne ilmestyivät painosta, herättivät ne yleistä
huomiota täydellisen runomuotonsa ja siroutensa tähden, mutta
ennen kaikkea sen syvällisen ja hienon tunteen tähden, joka niistä
uhkui.

16.

Henning Svennius oli se toveri, jonka kanssa Kurt eniten


seurusteli.
Tuon nuoren miehen tyyni, sävyisä olento vaikutti terveellisesti
Kurttiin, jolla oli haaveileva luonne ja vilkas mielikuvitus.

Henningin tunteet olivat syvät ja voimakkaat, mutta hän hallitsi


niitä täydellisesti. Ainoastaan musiikissa laski hän ne valloilleen, ja
ehkä juuri sen vuoksi hän tempasi kaikki kuulijat mukaansa.

Vaikka Henning jossain määrin arvasikin ystävänsä tunteet


kauniiseen
Dagmariin, ei hän ollut niistä tietävinäänkään.

Hän oli kesällä jonkun aikaa Vesterlångassa ja tutustui vielä


läheisemmin Warenheimin perheeseen, kuin viime kerralla. Mitään
arvonimiä ei enään käytetty ja hän oli pappilassa aivan kuin
kotonaan.

Eva oli ihastuksissaan. Hän ei ollut unohtanut ystäväänsä niinä


kolmena vuotena, jotka olivat kuluneet hänen viime käynnistään, ja
usein oli Henning Upsalaan saanut häneltä iloisia kirjeitä,
kirjoitettuna suurella, pyöreällä, lapsellisella käsialalla. Saatuaan
hänen vastauksensa, oli Eva tanssinut ja hyppinyt ilosta, selittäen,
että Henning oli paljon parempi kuin Kurt, joka vaan kirjoitti äidille.
Kun hän sitten tuli, ei hän saanut rauhaa, ennen kuin Henning oli
saanut kuulla, kuinka hän oli edistynyt soitannossa. Kun Henning
kehui häntä, rohkaisi hän itsensä ja pyysi saada laulaa kaikki pienet
laulut, jotka oli oppinut, ja näyttää hänelle taulun, jonka hän oli
piirtänyt aivan omintakeisesti. Vihdoin täytyi äidin kehoittaa häntä
jättämään Henning rauhaan, eikä aivan väsyttämään häntä. Eva
katsoi häneen ja huomautti:

"Ei hän ollenkaan näytä väsyneeltä, äiti." Sitten jatkoi hän aivan
tyynesti lapsellisia laverruksiaan.
Anna oli keväällä saanut kauniin päästötodistuksen seminaarista ja
odotti jotakin paikkaa avonaiseksi, voidakseen hakea sitä. Hän oli nyt
kotona ja nautti tarpeellista, virkistävää lepoa uutteran työn jälkeen.

Eräänä lauantai-iltana, kun rouva Warenheim oli lopettanut


askareensa tavallista aikaisemmin, otti hän hattunsa mennäkseen
hetkeksi ulos kauniiseen viileään iltailmaan. Mentyään hautausmaan
ohi, loi hän tapansa mukaan katseensa Erikin haudalle ja huomasi
Annan yksinään istumassa penkillä, sen vieressä, tuuheain suurten
puiden alla. Iltapäivän auringon punertavat säteet tunkeutuivat
lehtien läpi ja hyppelivät tiheässä, mehevässä ruohossa hautojen
välillä.

Rouva Warenheim meni sinne ja istuutui tyttärensä viereen, ja


luonnollisesti rupesivat he nyt, puhumaan kuolleesta, joka nukkui
pitkää untansa heidän jalkojensa alla. Äiti ihmetteli tyttärensä
muuten karkean äänen hienoa sointua, kun hän puhui veljestään.

"Olitko sinä niin kiintynyt Erikkiin?" kysyi hän.

"Kaipaatko sinä häntä paljon?"

"Kaipaan toisinaan, mutta samalla olen kuitenkin iloinen, että asiat


ovat, niinkuin ovat."

"Kuinka niin?"

"Jos hän olisi elänyt, olisimme me vieraantuneet toisistamme. Hän


olisi saanut toisia harrastuksia, eikä olisi huolinut enää minusta. Nyt
tuntuu ikäänkuin hän olisi enemmän minun, mehän olimme henki ja
elämä toisillemme lapsina."
Hän vaikeni ja äiti katseli häntä miettiväisenä. Hiljainen, säteilevä
ilta ja tämä varjoisa paikka, jossa he istuivat, olivat omiaan
kehoittamaan heitä tuttavalliseen ajatusten vaihtoon, ja Anna jatkoi:

"Ja vaikka emme olisikaan vieraantuneet toisistamme, olisi


itsekästä minun puoleltani toivoa häntä takaisin. Hänhän ei voi kärsiä
nyt."

"Sinä olet oikeassa", sanoi äiti, "en minäkään tekisi sitä, vaikka se
olisikin vallassani. Mutta, Anna, kärsitkö sinä?"

Se tuli epäröiden, tuo kysymys. "Kaikkien ihmisten täytynee kai


kärsiä", vastasi Anna kierrellen.

"Sinä olet liian nuori, puhuaksesi tuolla tavoin", sanoi rouva


Warenheim levottomasti. Anna katsoi toisaalle.

"Etkö sinä usko, että muutamat ihmiset ovat luodut kärsimään


enemmän kuin toiset?" kysyi hän. "En, lapseni, me olemme kaikki
luodut korkeimpaan onneen: ijankaikkiseen elämään Jumalassa.
Mutta sinä olet oikeassa, että muutamat ihmiset saavat kärsiä
enemmän kuin toiset, jotta tämä elämä kasvaisi."

"Sitten kuulun minä niihin", sanoi Anna. "Minä olen kärsinyt paljon
ja tulen aina kärsimään. Tuntuu, ikäänkuin surun pilvi olisi leijaillut
ympärilläni niin kauan kuin muistan. Minä tiedän, etten voi tulla
onnelliseksi, ennen kuin voin unohtaa itseni."

Rouva Warenheim ei tietänyt olisiko hänen pitänyt iloita vai surra


tämän keskustelun johdosta. Hän oli itse elävä kristitty. Hänen
uskonsa oli kasvanut Jumalan rakkauden auringonpaisteessa,
tyttäressään näki hän sitävastoin sumusta ja varjoista kasvaneen
uskon, joka vieläkin oli niiden ympäröimä. Mistä saisi hän valoa ja
iloa? Hän kietoi kätensä Annan vartalon ympäri ja veti hänet
hellyydellä luoksensa.

"Voitko sinä rakastaa Jumalaa, kun sinä luulottelet, että Hän on


luonut sinut kärsimyksiin ja suruun?" kysyi hän.

"Etkö sinä ymmärrä, mikä se on, joka tuottaa minulle surua?"


sanoi Anna lyhyesti, "se olen minä itse, joka kaikin tavoin, sekä
ulkonaisesti, että sisällisesti olen sellainen, jollainen minä en tahtoisi
olla. Jota enemmän minä taistelen vaikeita vikojani vastaan, sitä
pahemmaksi ne tulevat minun mielestäni. Mutta Kristukseen,
ainoaan, joka voi auttaa, asetan minä toivoni, ja sentähden rakastan
minä Häntä. Hän se on, joka sovittaa minut elämän kanssa, muuten
ei se rahtuistakaan viehättäisi minua."

Juuri kun Anna oli lausunut nämä sanat, kuului ilta-ilmassa


yksinäinen kellonsävel. Se levisi yli Långsjön ja hiljainen kaiku toisti
sen toisella rannalla olevilta vuorenkukkuloilta. Sitten kajahti kellon
ääni toisen kerran ja sitten kerran toisensa perään.

"Iltakellot vastaavat puolestani", sanoi rouva Warenheim, kun


viimeinen väräjävä sävel oli haihtunut etäisyyteen. "Jumalan rauha
varjelkoon sydämesi, kohdatkoon sinua sitten maailmassa ilo taikka
suru."

Hän suuteli tytärtänsä. Silloin satoi heidän ylitsensä koko sylillinen


kukkia ja ruohoa, ja iloinen nauru kaikui heidän korvissaan. He
katsoivat hämmästyneinä ympärilleen ja huomasivat Evan kiviaidalla,
takanaan. Tukka oli vaaleana ja kiharaisena hänen pienten
punottavien kasvojensa ympärillä, suu hymyili ja silmät säteilivät
veitikkamaisesta ihastuksesta. Hän taputti käsiään, jotka hänen
kiviaidalle kiivetessään olivat tulleet multaisiksi.

"Oi Henning, se onnistui aivan mainiosti, he eivät ollenkaan


huomanneet minua ja ovat niin hämillään. Tule sinäkin tänne!" huusi
hän.

"Minä tulen mieluummin tietä pitkin. Odota, kunnes ehdin, niin


autan sinut alas", vastasi Henning kiviaidan toiselta puolelta.

Tämän äänen kuultuaan tunsi Anna kuinka kellojen tuottama


rauha rupesi haihtumaan. Hän tunsi sen tuskalla ja koetti säilyttää
mielessään äitinsä sanoja Jumalan rauhasta, joka varjelisi hänen
sydämensä. Häntä värisytti tuskallinen aavistus tulevista hiljaisista
suruista ja kieltäymyksistä. Hänestä tuntui ikäänkuin pimittäisi hänen
elämänsä tietä enemmän kuin ennen ristin varjo, jota hän saisi
kantaa ja joka jo oli ruvennut painamaan hänen hartioitaan. Kuinka
saisi hän voimia kantaakseen sitä ja kestääkseen kohtaloansa?

"Rauha, Herran rauha se on,


Sitä tahdon mä rukoilla."

Tämä Geijerin laulu johtui hänen mieleensä ja vuodatti ihmeellistä


lohdutusta hänen sieluunsa.

"Mä tiedän tervehdyksen paremman, kuin mitä sä voit antaa,


maailma: Rauha, Herran rauha se on, sitä tahdon mä rukoilla!"
kaikui hänen sydämessään.

"Miten sinä pääsit aidalle, pikku huimapää?" kysyi rouva


Warenheim hymyillen.
"Henning auttoi minua, mutta alas minä hyppään itse", sanoi Eva
ja oli maassa ennenkuin Henning ehti lähellekään.

"Eva, sinä olet aina Henningin kintereillä, hänestä saattaa se


tuntua rasittavalta", sanoi äiti.

Eva loi ihmettelevän katseen Henningiin, joka lähestyi heitä


tavallista tietä myöten portin kautta.

"Älkää olko huolissanne siitä, täti", sanoi hän.

"Jos tahdon olla rauhassa, lähetän hänet pois luotani, mutta tällä
kertaa olin se minä, joka etsin hänen seuraansa. Me teimme
hauskan kävelymatkan metsään, eikö niin, Eva?"

"Niin, ja minä poimin kaikki nämä kukat, jotka satoivat ylitsenne


äsken. Ettekö te hämmästyneet?"

"Kyllä, se on varma! Me puhelimme niin hartaasti, ettemme


ensinkään huomanneet teitä", vastasi äiti.

"Ehkä me häiritsimme teitä?" kysyi Henning, joka oli huomannut


Annan vakavan ja miettivän ilmeen.

"Siinä tapauksessa tapahtui se hupaisalla tavalla", sanoi rouva


Warenheim ja nousi lähteäkseen.

Anna ja Eva poimivat ylös ympäri varisseet kukat, ja sitten menivät


he kotiin, missä illallinen, joka syötiin aikaisin, odotti heitä.

17.
Anna sai paikan syksyllä eräässä Tukholman kansakoulussa. Alussa
oli hän levoton siitä, miten menestyisi, mutta huomasi pian, että
juuri tämä työ soveltui hänelle. Hän kiintyi pieniin oppilaihinsa ja
huomasi omaavansa tuon onnellisen kyvyn voittaa heidän
sydämensä.

Dagmar Rencrona oli palannut ulkomailta ja vietti nyt talvea


pääkaupungissa.

Kurt iloitsi siitä, että sisarensa oli Tukholmassa, sillä siten oli hänen
yhtämittaisilla sinne-matkoillaan luonnollinen syy.

Dagmar oli muuttunut. Nuorekas sydämellisyys oli väistynyt ja


sijaan oli tullut maailmannaisen kylmä kohteliaisuus. Hän ei antanut
enään hetken tunteen huumata itseään. Hänen puhelunsa oli
miellyttävää ja rattoisaa, hän oli kaunis ja komea, hymyili jokaiselle,
mutta ei koskaan enää seurannut sydämensä hetkellisiä tunteita,
siksi kylmästi harkitsi hän nyt asioita.

Kurt ei huomannut hänessä tapahtunutta muutosta; hän ihmetteli


vaan, miks'ei hän koskaan voinut muistuttaa hänelle hänen viimeisiä
sanojaan, jotka hän ennen lähtöään oli lausunut. Mutta Dagmar
tiesi, miksi hän ei tahtonut, että hänelle olisi muistutettu niitä.

Hän luki Kurtin viimeksi ilmestyneet runot ja ymmärsi heti, kuka oli
innostuttanut häntä kirjoittaessaan niitä. Nuoren runoilijan rakkaus
oli liian romantillinen ja imarteleva, eikä hän olisi tahtonut päästä
siitä, ja suitsutus, jota tämä poltti hänen jalkainsa juuressa, miellytti
häntä liian paljon, hänen tahtoakseen sammuttaa sitä. Mutta
pitemmälle se ei saanut mennä. Hän ei tahtonut työntää häntä pois,
eikä sitoa itseänsä häneen; sen vuoksi tulisi hänen pysyä siinä, missä
oli.
Mutta Kurtilla ei ollut sitä tottelevaista orjan luonnetta, kuin
Dagmar luuli. Asiain tila rupesi tuntumaan hänestä sietämättömältä.
Päätettyään uskaltaa ratkaisevan askelen, matkusti hän Tukholmaan
varmana asiansa onnistumisesta. Mutta hänen oli vaikea kohdata
Dagmaria yksin. Jos hän viittasi haluavansa sitä, ei Dagmar ollut
ymmärtävinään häntä. Kurt ihmetteli tätä, mutta ei menettänyt
toivoaan, sillä hän ei voinut uskoa, että Dagmarin tunteet olisivat
muuttuneet.

Viime aikoina ei hän ollut salannut tunteitaan, kuten alussa. Ennen


lähtöään Upsalasta oli hän ilmoittanut Henning Svenniukselle
matkansa tarkoituksen, ja kun hän ilmoitti Annalle salaisuutensa
saadakseen hänen apuaan, ei tämä hämmästynyt sanottavasti.
Hänen silmänsä olivat sitä ennen avautuneet.

"Nyt täytyy sinun toimittaa niin, että minä saan puhutella


Dagmaria kahdenkesken", sanoi veli.

"Mutta oletko sinä niin varma siitä, että hän pitää sinusta?" sanoi
sisar epäillen.

"Sitä minä juuri tahdon kysyä häneltä", vastasi Kurt


kärsimättömästi, "enkä minä ole sellainen narri, että kysyisin
sellaista, ellen olisi jotensakin varma asiastani."

Siihen se juttu päättyi. Anna telefoneerasi Dagmarille ja kutsui


häntä luokseen illalla, mainitsematta, että Kurt oli kaupungissa.

Dagmar tuli ja istui sohvaan ystävänsä viereen, toivoen saada


viettää hupaisan puheluhetken, mutta ihmetteli ystävänsä tavatonta
levottomuutta ja hajamielisyyttä. Etehisen kello soi ja Anna säpsähti.
"Odotatko sinä ketään?" kysyi Dagmar.

"Odotan", vastasi Anna ja kiiruhti huoneesta.

Dagmar aavisti, että tulisi tapahtumaan jotakin vastenmielistä.


Hän nousi seuratakseen ystäväänsä, mutta samassa avautui ovi ja
Kurt seisoi kynnyksellä. Silloin ymmärsi hän heti kaikki ja voimaton
harmin tunne valtasi hänet sen johdosta, että hänet täten oli
houkuteltu satimeen, tukehuttaen kaikki hellemmät tunteet.
Tällainen hävyttömyys on rangaistava.

Kurt sulki oven ja astui muutaman askeleen häntä kohti.

"Dagmar, minä olen halunnut saada puhutella sinua


kahdenkesken", sanoi hän.

"Minkätähden? Mitä on teillä sanomista minulle, jota ei voisi sanoa


missä tahansa?" kysyi Dagmar jääkylmällä äänellä.

Kurt säpsähti ja katsoi häneen, ikäänkuin epäillen omia korviaan.

"Minä tahdoin muistuttaa niitä sanoja, jotka vaihdoimme vuosi


sitten, kun me yhdessä lähdimme täältä."

Hänen näytti olevan vaikea puhua.

"Kyllä sietääkin muistuttaa, sillä minä olen aivan unohtanut ne",


sanoi Dagmar samalla äänellä kuin ennenkin ja katseli
tyytyväisyydellä Kuntin hämmästystä.

"Dagmar, sinä lupasit…?" huudahti hän epätoivoisesti.

"Minä en luvannut mitään", vastasi tämä ylpeästi, tyynesti


seuraten haluaan saada perinpohjin nolata häntä. Sitten aikoi hän
ehkä tulla lempeämmäksi.

Kurt katsoi häneen hämmästyneenä ja nosti käden otsalleen


ikäänkuin selvittääkseen ajatuksiaan.

"Minä rakastin sinua niin suuresti! Minä luotin sinuun, kun sinä
vaan leikit kanssani! Mikä houkkio minä olenkaan ollut!" voihki hän
ja poistui kiireesti odottamatta vastausta.

Dagmar seisoi ihmetellen paikallaan ja odotti, että hän palaisi,


mutta hän ei tullut. Sitten kävi hänen mielensä apeaksi.

"Sellainen huimapää", mutisi hän itsekseen, "ensin syöksyy esiin


tuolla tavoin, eikä sitten voi malttaa mieltänsä!"

Hetkisen kuluttua tuli Anna sisään. Hän oli kalpea ja vältti katsoa
Dagmariin, joka oli varma merkki siitä, että hän oli suuttunut taikka
surullinen, taikka kumpaakin. — Dagmar sanoi hyvästi eikä Anna
yrittänyt pidättää häntä.

"Sano veljellesi terveisiä, ettei hän toiste menettele niin


päättömästi, eikä tulistuu kaikesta niin kovin", sanoi hän
ohimennessään, katsomatta Annaan.

"Tuskinpa vaan minä sitä teen", vastasi tämä lyhyesti.

Dagmar meni kotiin suuttuneena Annaan, itseensä, Kurttiin ja


koko maailmaan. Koko yönä ei hän tahtonut saada unta. Hän
heitteleikse rauhattomana edes takaisin. Kurtin liikutetut kasvot ja
tuskan hämmentämä katse ei jättänyt häntä rauhaan ja hänen
viimeinen katkera huokauksensa kaikui alati Dagmarin korvissa.
Turhaan koetti hän lohduttaa itseään sillä, että syy oli Kurtin ja
että hän oli oikeutettu kohtelemaan häntä näin kylmästi. Olisihan
hän voinut tyytyä siihen, että olisi vaan etäältä jumaloinut häntä,
tunkeutumatta lähemmäksi vasten hänen tahtoaan.

Vihdoin tuli hän ajatelleeksi lumousvoimaansa ja Kurtin rakkautta


häneen. Hän ei varmaankaan pysyisi poissa, vaan tulisi takaisin,
taikka kirjoittaisi kenties. Silloin olisi hän ystävällisempi ja osoittaisi,
ettei hän tarkoittanut pahaa, vaan tahtoi ainoastaan rangaista häntä
hänen äkkiarvaamattoman yllätyksensä vuoksi. Tämä ajatus
tyynnytti häntä niin että hän aamupuoleen nukahti.

Kun hän heräsi, oli kello paljon. Kirkas auringonpaiste virtasi


huoneeseen hänen vetäessään uutimia syrjään. Hänen suhteensa
Kurttiin ei saattanut olla aivan lopussa; se tuntuisi liian tyhjältä, sen
tunsi hän nyt. Jo tänään saisi hän varmaankin kuulla hänestä ja hän
hymyili ajatellessaan kuinka iloiseksi Kurt tulisi, kun hän antaisi
hänelle anteeksi. Hän tahtoisi tehdä sen vähitellen ja näyttää
hänelle, että hän on hallitsijatar, joka ei salli itseään lähestyttävän
ennen kuin hän ojentaa valtikkansa.

Joka kerran kun etehisen kello soi, kuunteli Dagmar Kurtin ääntä,
ja kun kirjelaatikon kansi napsahti, katsoi hän, oliko siellä kirjettä
hänelle. Mutta päivä kului ja toinenkin ja päivistä tuli viikko ja ilman
että Kurttia taikka hänen kirjeitään kuului. Sen sijaan kuului huhuja,
ensin hämäriä, mutta pian yhä varmempia, että Kurt Warenheim oli
joutunut huonoon seuraan ja että hän usein vietti aikaansa
huonomaineisissa paikoissa. Dagmar ei tahtonut kuunnella näitä
huhuja, hän koetti unohtaa ne heittäytymällä vielä suuremmalla
innolla kuin ennen huvien pyörteeseen. Mutta hän ei löytänyt
unohdusta sieltä. Hän väsyi kaikkeen, mikä ennen oli huvittanut
häntä ja muodostanut hänen elämänsä. Kaikki nuoret miehet
tuntuivat hänestä turhilta ja vähäpätöisiltä, verrattuna häneen, jonka
hän oikullisuudessaan oli sysännyt luotaan. Hän huomasi
kauhistuksekseen, että hän rakasti Kurttia. Ylpeys vastusti tuota
tunnetta ja kuiskasi, ettei hän enää ollut hänen arvoisensa. Mutta
silloin kohotti omatunto äänensä ja pakotti hänen tunnustamaan,
että Kurt oli langennut juuri hänen tähtensä.

18.

Pienessä yksinkertaisessa huoneessaan täti Constansen luona


seisoi Anna ja tarkasteli huolestuneen näköisenä vanhaa, kulunutta
talvihattuaan. Hän ei ollut aikonut hankkia itselleen vielä uutta,
mutta nyt kevätpuoleen, kun aurinko rupesi valaisemaan
kirkkaammin, paljastuivat tuon vanhan hatun monet puutteellisuudet
selvemmin. Tädin likinäköiset silmätkin olivat jo huomanneet ne. Tuo
hyväntahtoinen mummo, joka sokeasti ihaili veljensätytärtä
hyväksyen kaikki, mitä tämä teki, oli ujosti kysynyt, aikoiko Anna
todellakin käyttää tuota vanhaa päähinettä koko talven.

Anna mietti ja käänteli tuota hyljättäväksi tuomittua esinettä ja oli


hyvin huonolla tuulella, kuten aina, kun hänen täytyi hankkia
itselleen jotakin uutta. Hän laski rahansa. Kymmenen kruunua. Ne
riittäisivät hyvin. Mutta hän tunsi itsensä ja tiesi, että ellei hän heti
menisi ja päättäisi aijottua kauppaansa, olisivat rahat pian menneet.
Hän pani senvuoksi päähänsä vanhan hattunsa mennäkseen
ostamaan itselleen hienomman. Silloin soi eteisen kello. Hän aukaisi.
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookball.com

You might also like