AI and Machine Learning for Coders A Programmer s Guide to Artificial Intelligence 1st Edition Laurence Moroney instant download
AI and Machine Learning for Coders A Programmer s Guide to Artificial Intelligence 1st Edition Laurence Moroney instant download
https://textbookfull.com/product/ai-and-machine-learning-for-
coders-a-programmer-s-guide-to-artificial-intelligence-1st-
edition-laurence-moroney/
https://textbookfull.com/product/artificial-intelligence-and-
machine-learning-for-business-a-no-nonsense-guide-to-data-driven-
technologies-steven-finlay/
https://textbookfull.com/product/artificial-intelligence-and-
machine-learning-for-business-for-non-engineers-1st-edition-
stephan-s-jones-editor/
https://textbookfull.com/product/cracking-the-code-introduction-
to-machine-learning-for-novices-building-a-foundation-for-
artificial-intelligence-1st-edition-sarah-parker/
https://textbookfull.com/product/agriculture-5-0-artificial-
intelligence-iot-and-machine-learning-1st-edition-latief-ahmad/
Artificial Intelligence With an Introduction to Machine
Learning 2nd Edition Richard E. Neapolitan
https://textbookfull.com/product/artificial-intelligence-with-an-
introduction-to-machine-learning-2nd-edition-richard-e-
neapolitan/
https://textbookfull.com/product/matlab-deep-learning-with-
machine-learning-neural-networks-and-artificial-intelligence-1st-
edition-phil-kim/
https://textbookfull.com/product/artificial-intelligence-for-
business-what-you-need-to-know-about-machine-learning-and-neural-
networks-doug-rose/
https://textbookfull.com/product/oracle-business-intelligence-
with-machine-learning-artificial-intelligence-techniques-in-
obiee-for-actionable-bi-1st-edition-rosendo-abellera/
https://textbookfull.com/product/the-definitive-guide-to-
firebase-build-android-apps-on-googles-mobile-platform-1st-
edition-laurence-moroney-auth/
Praise for AI and Machine Learning for Coders
“Machine learning should be in the toolbox of every great engineer in this coming decade.
For people looking to get started, AI and Machine Learning for Coders by Laurence
Moroney is the much-needed practical starting point to dive deep into
deep learning, computer vision, and NLP.”
—Dominic Monn, Machine Learning at Doist
“The book is a great introduction to understand and practice machine learning and
artificial intelligence models by using TensorFlow. It covers various deep learning models,
and their practical applications, as well as how to utilize TensorFlow framework to
develop and deploy ML/AI applications across platforms. I recommend it
for anyone who is interested in ML and AI practice.”
—Jialin Huang PhD, Data and Applied Scientist at Microsoft
“This book is a must-read for developers who would like to get into AI/ML.
You will learn a variety of examples by coding instead of math equations.”
—Margaret Maynard-Reid, ML Google Developer Expert
“A practical handbook to have on your desk for implementing deep learning models.”
—Pin-Yu Chen, Research Staff Member at IBM Research AI
“A fun book to read and practice coding for AI and machine learning projects. Intuitive
wording and graphs to explain the nonintuitive concepts and algorithms. Cool coding
examples to teach you key building blocks for AI and ML. In the end, you can code
AI projects for your PC program, Android, iOS and Browser!”
—Su Fu, CEO of Alchemist
AI and Machine Learning
for Coders
A Programmer’s Guide to Artificial Intelligence
Laurence Moroney
The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. AI and Machine Learning for Coders,
the cover image, and related trade dress are trademarks of O’Reilly Media, Inc.
The views expressed in this work are those of the author, and do not represent the publisher’s views.
While the publisher and the author have used good faith efforts to ensure that the information and
instructions contained in this work are accurate, the publisher and the author disclaim all responsibility
for errors or omissions, including without limitation responsibility for damages resulting from the use of
or reliance on this work. Use of the information and instructions contained in this work is at your own
risk. If any code samples or other technology this work contains or describes is subject to open source
licenses or the intellectual property rights of others, it is your responsibility to ensure that your use
thereof complies with such licenses and/or rights.
978-1-492-07819-7
[LSI]
Table of Contents
Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
v
Exploring the Model Output 29
Training for Longer—Discovering Overfitting 30
Stopping Training 30
Summary 32
vi | Table of Contents
Getting Text from TensorFlow Datasets 93
Getting Text from CSV Files 97
Getting Text from JSON Files 99
Summary 101
11. Using Convolutional and Recurrent Methods for Sequence Models. . . . . . . . . . . . . . 191
Convolutions for Sequence Data 191
Coding Convolutions 192
Experimenting with the Conv1D Hyperparameters 195
Using NASA Weather Data 198
Reading GISS Data in Python 199
Using RNNs for Sequence Modeling 200
Exploring a Larger Dataset 203
Using Other Recurrent Methods 205
Using Dropout 206
Using Bidirectional RNNs 209
Summary 211
Table of Contents | ix
16. Coding Techniques for Computer Vision in TensorFlow.js. . . . . . . . . . . . . . . . . . . . . . . 275
JavaScript Considerations for TensorFlow Developers 276
Building a CNN in JavaScript 277
Using Callbacks for Visualization 279
Training with the MNIST Dataset 282
Running Inference on Images in TensorFlow.js 288
Summary 288
x | Table of Contents
Tools for Fairness 345
The What-If Tool 345
Facets 346
Federated Learning 349
Step 1. Identify Available Devices for Training 349
Step 2. Identify Suitable Available Devices for Training 350
Step 3. Deploy a Trainable Model to Your Training Set 350
Step 4. Return the Results of the Training to the Server 351
Step 5. Deploy the New Master Model to the Clients 351
Secure Aggregation with Federated Learning 352
Federated Learning with TensorFlow Federated 353
Google’s AI Principles 354
Summary 355
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Table of Contents | xi
Foreword
Dear Reader,
AI is poised to transform every industry, but almost every AI application needs to be
customized for its particular use. A system for reading medical records is different
from one for finding defects in a factory, which is different from a product recom‐
mendation engine. For AI to reach its full potential, engineers need tools that can
help them adapt the amazing capabilities available to the millions of concrete prob‐
lems we wish to solve.
When I led the Google Brain team, we started to build the C++ precursor to
TensorFlow called DistBelief. We were excited about the potential of harnessing thou‐
sands of CPUs to train a neural network (for instance, using 16,000 CPUs to train a
cat detector on unlabeled YouTube videos). How far deep learning has come since
then! What was once cutting-edge can now be done for around $3,000 of cloud com‐
puting credits, and Google routinely trains neural networks using TPUs and GPUs at
a scale that was unimaginable just years ago.
TensorFlow, too, has come a long way. It is far more usable than what we had in the
early days, and has rich features ranging from modeling, to using pretrained models,
to deploying on low-compute edge devices. It is today empowering hundreds of thou‐
sands of developers to build their own deep learning models.
Laurence Moroney, as Google’s lead AI Advocate, has been a major force in building
TensorFlow into one of the world’s leading AI frameworks. I was privileged to sup‐
port his teaching TensorFlow with deeplearning.ai and Coursera. These courses have
reached over 80,000 learners and received numerous glowing reviews.
One unexpected aspect of friendship with Laurence is that he is also a free source of
Irish poetry. He once Slacked me:
xiii
Andrew sang a sad old song
fainted through miss milliner
invitation hoops
fainted fainted
[...]
He had trained an LSTM on lyrics of traditional Irish songs and it generated these
lines. If AI opens the door to fun like that, how could anyone not want to get
involved? You can (i) work on exciting projects that move humanity forward, (ii)
advance your career, and (iii) get free Irish poetry.
I wish you the best in your journey learning TensorFlow. With Laurence as a teacher,
great adventures await you.
Keep learning,
— Andrew Ng
Founder, deeplearning.ai
xiv | Foreword
Preface
Welcome to AI and Machine Learning for Coders, a book that I’ve been wanting to
write for many years but that has only really become possible due to recent advances
in machine learning (ML) and, in particular, TensorFlow. The goal of this book is to
prepare you, as a coder, for many of the scenarios that you can address with machine
learning, with the aim of equipping you to be an ML and AI developer without need‐
ing a PhD! I hope that you’ll find it useful, and that it will empower you with the con‐
fidence to get started on this wonderful and rewarding journey.
xv
participant selected. Three months later, the program failed miserably, because while
there was plenty of theoretical work that could be done with AI, there was no easy way
to do it practically. One could write simple inference in a language called Prolog, and
perform list processing in a language called Lisp, but there was no clear path to
deploying them in industry. The famous “AI winter” followed.
Then, in 2016, while I was working at Google on a product called Firebase, the com‐
pany offered machine learning training to all engineers. I sat in a room with a num‐
ber of other people and listened to lectures about calculus and gradient descent. I
couldn’t quite match this to a practical implementation of ML, and I was suddenly
transported back to 1992. I brought feedback about this, and about how we should
educate people in ML, to the TensorFlow team—and they hired me in 2017. With the
release of TensorFlow 2.0 in 2018, and in particular the emphasis on high-level APIs
that made it easy for developers to get started, I realized the need was there for a book
that took advantage of this, and widened access to ML so that it wasn’t just for mathe‐
maticians or PhDs anymore.
I believe that more people using this technology and deploying it to end users will
lead to an explosion in AI and ML that will prevent another AI winter, and change
the world very much for the better. I’m already seeing the impact of this, from the
work done by Google on diabetic retinopathy, through Penn State University and
PlantVillage building an ML model for mobile that helps farmers diagnose cassava
disease, Médecins Sans Frontières using TensorFlow models to help diagnose antibi‐
otic resistance, and much, much more!
xvi | Preface
you can probably pick up what you need as you go along (although some of the array
notation might be a bit hard to grasp).
For the second half of the book, I generally will not teach the languages that are
shown, but instead show how TensorFlow models can be used in them. So, for exam‐
ple, in the Android chapter (Chapter 13) you’ll explore building apps in Kotlin with
Android studio, and in the iOS chapter (Chapter 14) you’ll explore building apps in
Swift with Xcode. I won’t be teaching the syntax of these languages, so if you aren’t
familiar with them, you may need a primer—Learning Swift by Jonathan Manning,
Paris Buttfield-Addison, and Tim Nugent (O’Reilly) is a great choice.
Online Resources
A variety of online resources are used by, and supported in, this book. At the very
least I would recommend that you keep an eye on TensorFlow and its associated You‐
Tube channel for any updates and breaking changes to technologies discussed in the
book.
The code for this book is available at https://github.com/lmoroney/tfbook, and I will
keep it up to date there as the platform evolves.
Preface | xvii
Using Code Examples
This book is here to help you get your job done. In general, if example code is offered
with this book, you may use it in your programs and documentation. You do not
need to contact us for permission unless you’re reproducing a significant portion of
the code. For example, writing a program that uses several chunks of code from this
book does not require permission. Selling or distributing examples from O’Reilly
books does require permission. Answering a question by citing this book and quoting
example code does not require permission. Incorporating a significant amount of
example code from this book into your product’s documentation does require
permission.
We appreciate, but do not require, attribution. An attribution usually includes the
title, author, publisher, and ISBN. For example: “AI and Machine Learning for Coders,
by Laurence Moroney. Copyright 2021 Laurence Moroney, 978-1-492-07819-7.”
If you feel your use of code examples falls outside fair use or the permission given
above, feel free to contact us at [email protected].
Our unique network of experts and innovators share their knowledge and expertise
through books, articles, and our online learning platform. O’Reilly’s online learning
platform gives you on-demand access to live training courses, in-depth learning
paths, interactive coding environments, and a vast collection of text and video from
O’Reilly and 200+ other publishers. For more information, visit http://oreilly.com.
How to Contact Us
Please address comments and questions concerning this book to the publisher:
xviii | Preface
We have a web page for this book, where we list errata, examples, and any additional
information. You can access this page at https://oreil.ly/ai-ml.
Email [email protected] to comment or ask technical questions about this
book.
For news and information about our books and courses, visit http://oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Acknowledgments
I’d like to thank lots of people who have helped in the creation of this book.
Jeff Dean, who gave me the opportunity to be part of the TensorFlow team, beginning
the second phase of my AI journey. There’s also the rest of the team, and while there
are too many to name, I’d like to call out Sarah Sirajuddin, Megan Kacholia, Martin
Wicke, and Francois Chollet for their amazing leadership and engineering!
The developer relations team for TensorFlow, led by Kemal El Moujahid, Magnus
Hyttsten, and Wolff Dobson, who create the platform for people to learn AI and ML
with TensorFlow.
Andrew Ng, who, as well as writing the Foreword for this book, also believed in my
approach to teaching TensorFlow, and with whom I created three specializations at
Coursera, teaching hundreds of thousands of people how to succeed with machine
learning and AI. Andrew also leads a team at deeplearning.ai who were terrific at
helping me be a better machine learner, including Ortal Arel, Eddy Shu, and Ryan
Keenan.
The team at O’Reilly that made this book possible: Rebecca Novack and Angela
Rufino, without whose hard work I never would have gotten it done!
The amazing tech review team: Jialin Huang, Laura Uzcátegui, Lucy Wong, Margaret
Maynard-Reid, Su Fu, Darren Richardson, Dominic Monn, and Pin-Yu.
And of course, most important of all (even more than Jeff and Andrew ;) ) is my fam‐
ily, who make the most important stuff meaningful: my wife Rebecca Moroney, my
daughter Claudia Moroney, and my son Christopher Moroney. Thanks to you all for
making life more amazing than I ever thought it could be.
Preface | xix
PART I
Building Models
CHAPTER 1
Introduction to TensorFlow
When it comes to creating artificial intelligence (AI), machine learning (ML) and
deep learning are a great place to begin. When getting started, however, it’s easy to get
overwhelmed by the options and all the new terminology. This book aims to demys‐
tify things for programmers, taking you through writing code to implement concepts
of machine learning and deep learning; and building models that behave more as a
human does, with scenarios like computer vision, natural language processing (NLP),
and more. Thus, they become a form of synthesized, or artificial, intelligence.
But when we refer to machine learning, what in fact is this phenomenon? Let’s take a
quick look at that, and consider it from a programmer’s perspective before we go any
further. After that, this chapter will show you how to install the tools of the trade,
from TensorFlow itself to environments where you can code and debug your Tensor‐
Flow models.
1
Figure 1-1. Code in a Breakout game
Here, the motion of the ball can be determined by its dx and dy properties. When it
hits a brick, the brick is removed, and the velocity of the ball increases and changes
direction. The code acts on data about the game situation.
Alternatively, consider a financial services scenario. You have data about a company’s
stock, such as its current price and current earnings. You can calculate a valuable ratio
called the P/E (for price divided by earnings) with code like that in Figure 1-2.
Your code reads the price, reads the earnings, and returns a value that is the former
divided by the latter.
As you can see, you have rules expressed in a programming language. These rules act
on data, and the result is answers.
As you can see, going by the speed, we might say if it is less than a particular value
(say, 4 mph) the person is walking, and otherwise they are running. It still sort of
works.
Now suppose we want to extend this to another popular fitness activity, biking. The
algorithm could look like Figure 1-6.
I know it’s naive in that it just detects speed—some people run faster than others, and
you might run downhill faster than you cycle uphill, for example. But on the whole, it
still works. However, what happens if we want to implement another scenario, such as
golfing (Figure 1-7)?
We’re now stuck. How do we determine that someone is golfing using this methodol‐
ogy? The person might walk for a bit, stop, do some activity, walk for a bit more, stop,
etc. But how can we tell this is golf?
Our ability to detect this activity using traditional rules has hit a wall. But maybe
there’s a better way.
Enter machine learning.
But what would happen if we were to flip the axes around on this diagram? Instead of
us coming up with the rules, what if we were to come up with the answers, and along
with the data have a way of figuring out what the rules might be?
Figure 1-9 shows what this would look like. We can consider this high-level diagram
to define machine learning.
Grief, which seems too deep for words, here breaks forth in such
an uncontrollable flood of song, expressed with so much truth and
nature, that a dramatic artist like Bernasconi would be sure to make
an extraordinary effect by it. The simple, purely musical means
employed, the expressive flowing melodies, rich harmonies, suitable
accompaniments, and charming moderation of expression—all these
show us the genuine Mozart.
Should it be objected that the milk-and-water heroism of the piece
is still further debased by gallantry in powder and gold lace, we can
nevertheless claim for it, after all deductions made, a certain amount
of stateliness and dignity. These qualities are indeed displayed more
according to court etiquette than to classical antiquity, but they are
unmistakably there, conformably to the manners of the time and the
nation, and their artistic significance is not small. Mithridates, who
has most of individual character after Aspasia, never forgets, as
Sonnleithner justly observes, that he is first tenor as well as king;
but on the other hand he always remembers that he is king as well
as first tenor.
MOZART'S EARLY The text of the opera "Lucio Silla," composed in
OPERAS.
1772 (135 K.), was written by Giovanni da
Camera, and according to the preface, revised by Metastasio. The
programme runs:—[See Page Image]
Cecilio, a senator, banished by Silla, has secretly returned to Rome
to learn the fate of his betrothed Junia, daughter of C. Marius; his
friend Cinna warns him that Silla has spread the rumour of his death
in order to win the hand of Junia; Cinna counsels him to meet her in
a burial-place. Silla, whose suit has been repulsed by Junia, resolves
to slay her. Cecilio awaits his betrothed in the dusky burial-place,
surrounded by the trophies of Roman heroes. She enters,
accompanied by noble youths and maidens, who call for vengeance
on Silla, and lament by the urn of her father. When she is alone,
Cecilio reveals himself. She takes him at first for a ghost, and they
then express their joy in a duet.
In the second act Aufidio, Silla's evil counsellor, advises him
publicly to declare Junia as his betrothed, and thereby reconcile the
contending factions; she will not be able to oppose the universal
wish. Celia, his sister, who always counsels well, informs him of the
ill-success of her appeal to Junia; he promises to unite Celia to her
lover Cinna. Silla has scarcely departed, when Cecilio rushes in to
murder him in obedience to a vision; Cinna counsels postponement,
to which Cecilio at last consents. Ciàna is now so engrossed in his
plans for revenge that he scarcely heeds Celia, who tells him of their
approaching happiness, and tries to persuade Junia to a feigned
submission, and the murder of Silla in his bed-chamber. But she
refuses to be guilty of high treason, and he resolves to slay Silla
himself.
Junia, who declares that she will never give her hand to Silla, is
threatened with death, but nevertheless counsels Cecilio, who
wishes to avenge her, to remain in concealment. Celia seeks in vain
to persuade her by the portrayal of her own happiness, but cannot
"LUCIO SILLA." stifle gloomy anticipations. Silla announces from
the capitol his intended union with Junia, and is answered by
acclamations, but Junia endeavours to stab herself, which is
prevented. Cecilio rushes in with drawn sword, is disarmed, and his
death on the following day decreed by Silla; Cinna, entering also
with drawn sword, sees that his plot has failed, and feigns to have
come to Silla's protection. A terzet between Junia, Cecilio, and Silla
concludes the act.
In the third act Cecilio in fetters is informed by Cinna of the ill-
success of his plot, and calls on him for vengeance. Junia declares
her resolve to slay herself before Cecilio. Aufidio comes to fetch him,
and the lovers take leave.
Silla declares before the assembled people that this day shall give
him vengeance and his heart's desire. Junia accuses him as the
mur» derer of her betrothed, and calls on the people to avenge her.
Silla pardons her and Cecilio, and unites the loving pair. Seized with
compunction Cinna reveals his plot against Silla; he, too, receives
pardon and the hand of Celia. Finally Silla forgives Aufidio his evil
counsels, lays down the dictatorship, and restores freedom to Rome.
The consideration of such a libretto as this renders
comprehensible the esteem in which Metastasio's texts were held.
There is no trace of psychological study of motive; Silla, a sort of
distorted Titus, alternates between cruelty and remorse, and finally
empties a perfect cornucopia of generosity on to the stage; Junia
too is unequal and weak. The situations are one and all as if
purposely arranged to lead to nothing; the poet has with difficulty
disposed the numerous scenes so as to introduce the necessary
songs in their proper order. And the verse itself is very far removed
from the grace and melody of Metastasio.
The score of the opera is preserved entire in Mozart's handwriting;
it is in three parts, and has 610 pages. It contains besides the
overture twenty-three numbers, among them three choruses (6, 17,
23), one duet (7), and one terzet (18). No wonder that the
composer paid court to the singers! The mishap that deprived the
opera of its tenor has been already narrated (p. 142). As the part
devolved in the end on a very unpractised singer, the greater part of
it was omitted, leaving only what was necessary for the coherence of
the plot. The two songs (5, 13) are written for a singer whose voice
and execution do not rise above the average, without any passages,
MOZART'S EARLY and with a moderate compass; the more
OPERAS.
elaborate instrumentation alone betrays that they
are intended for a principal performer. Two other songs for Silla
which are in the libretto were not composed at all, in order, no
doubt, as Sonnleithner conjectures, to give the tenor as little as
possible to do.
All the more stress is laid on the parts of De Amicis and Rauzzini.
Junia has four songs, which are all for a singer of the first rank. The
special bravura song (II) is in the second act, "Ah, se il crudel
periglio del caro ben ramento." Long passages of varied structure
are here the chief considerations. One example among many will
serve to show that Mozart was right in afterwards calling them
"dreadful":—[See Page Image]
Notwithstanding the bravura character of this song, its style is far
from well defined; that of the entering song, "Della sponde
tenebrose" (4), and of the third aria (16) is more marked. This last,
"Parto, m' affretto, ma nel partire il cor si spezza, mi manca la
anima," consists of a continuous and progressive allegro assai. An
agitated phrase for the first violins—supported by an accompaniment
for the second, runs through it almost without intermission; the
"LUCIO SILLA"— harmonising is interesting and varied; particularly
JUNIA.
effective is the immediate juxtaposition of major
and minor keys; the whole song is strikingly expressive of an
unsettled wavering mood.
Passages such as—[See Page Image] are brilliant, but not,
properly speaking, characteristic. At least they do not stamp the
actual situation with individuality; they seem designed only to define
the character and mood of the acting personage in their main
features, like the masks of ancient tragedy. The more detailed
analysis was left to the art and individuality of the performer, to
whom the composer offered only the means of combining dramatic
force with song. We can still recognise the essential features of the
characters; but we are quite unable to realise either the animation
with which great artists inspired them, or the effect they produced
on the minds of contemporaries. It is a mistake to consider bravura
and character as opposite terms; ornamental passages are quite
susceptible of characteristic expression, if they are delivered at the
right time and in the right way. Junia's songs express the character
of a proud strong Roman woman, and an opportunity for dramatic
analysis is offered to the performer even in the more florid songs.
But the true dramatic expression is undisturbed in Junia's last song
(22), "Fra i pensier più funesti di morte veder parmi l' esangue
consorte." The long adagio, followed by an allegro, is a distinct
foreshadowing of the later form. The treatment of the orchestra too
is significant. The flutes, oboes, and bassoons are in unison, and
contrast with the stringed instruments, after a fashion not usual at
the time: and in the allegro the orchestra is in significant opposition
to the voice part, which is simple and unadorned, although
calculated to give due effect to a fine voice; its dramatic expression
is quite excellent.
MOZART'S EARLY In the part of Cecilio, written for Rauzzini, the
OPERAS.
regard paid to the singer is very apparent both in
the compass of the voice, which comprises two octaves, and in the
style. He was what may be called a scholarly singer, theoretically
educated, and a composer himself, and difficulties are introduced
evidently with a view to this. Thus, for instance, the recitative
preceding his second aria is full of curious, sometimes harsh, turns
and transitions in the harmonies; in the third aria such jumps as the
following occur—[See Page Image] requiring no small certainty of
execution. The first song (2), introduced by a fine expressive
recitative, begins, as these male sopranos loved, with a long-
sustained note, and'contains various brilliant passages; but it is quite
without original invention. The second song (9) expresses a proud,
free mood with strength and animation; the last (21) can only be
explained as a freak of the performer. Cecilio, in the act of being led
to execution, moved by Junia's tears, turns to her with the words—
Pupille amate
Non lagrimate!
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com