DeepLearning - Maple Help

DeepLearning

A substantial effort was put into Deep Learning for Maple 2021, including offering a variety of new specialty forms of neural networks.

 > $\mathrm{with}\left(\mathrm{DeepLearning}\right):$

New commands

These commands are new for Maple 2021:

 •
 •
 •
 •
 •
 • MaxPoolLayer
 •
 •
 •
 •
 •
 •

New types of neural networks

The addition of Layer objects offers an easy mechanism for building specialized types of neural networks, including the following:

 • Convolutional neural networks: using ConvolutionLayer. These networks are often used for tasks such as image and video recognition.
 • Recurrent neural networks: using GatedRecurrentUnitLayer or LongShortTermMemoryLayer. These networks are often used for text processing or classification.

The new Sequential command allows one or more Layers to be stacked together, feeding the output from one layer into the next as input. This allows you to build sophisticated special-purpose neural networks by composing layers of different types.

Both Layer objects and the composite models created by the Sequential command are examples of Model objects. A Model can be fed new data to generate predictions and can also be saved to a file in the standard HDF5 file format.

Examples

Sequential Model: The Pima Diabetes Dataset

In this example we build a Sequential model with DenseLayers to model the Pima diabetes dataset, generating predictions about whether individuals will be diagnosed with a diabetes based on other diagnostic measurements included in the dataset.

This dataset is originally from the United States National Institute of Diabetes and Digestive and Kidney Diseases. All patients here are females at least 21 years old of Pima Indian heritage.

Source:
Pima Indian Diabetes Database, https://www.kaggle.com/uciml/pima-indians-diabetes-database.  Data originally published in:

 • Smith, J.W., Everhart, J.E., Dickson, W.C., Knowler, W.C., & Johannes, R.S. (1988). Using the ADAP learning algorithm to forecast the onset of diabetes mellitus. In Proceedings of the Symposium on Computer Applications and Medical Care (pp. 261--265). IEEE Computer Society Press.

We first load the data into a DataFrame:

 > $\mathrm{dataset}≔\mathrm{Import}\left("datasets/pima-epidemiology-diabetes.csv",\mathrm{base}=\mathrm{datadir}\right)$
 ${\mathrm{DataFrame}}{}\left({{\mathrm{_rtable}}}_{{36893488151981936140}}{,}{\mathrm{rows}}{=}\left[{1}{,}{2}{,}{3}{,}{4}{,}{5}{,}{6}{,}{7}{,}{8}{,}{9}{,}{10}{,}{11}{,}{12}{,}{13}{,}{14}{,}{15}{,}{16}{,}{17}{,}{18}{,}{19}{,}{20}{,}{21}{,}{22}{,}{23}{,}{24}{,}{25}{,}{26}{,}{27}{,}{28}{,}{29}{,}{30}{,}{31}{,}{32}{,}{33}{,}{34}{,}{35}{,}{36}{,}{37}{,}{38}{,}{39}{,}{40}{,}{41}{,}{42}{,}{43}{,}{44}{,}{45}{,}{46}{,}{47}{,}{48}{,}{49}{,}{50}{,}{51}{,}{52}{,}{53}{,}{54}{,}{55}{,}{56}{,}{57}{,}{58}{,}{59}{,}{60}{,}{61}{,}{62}{,}{63}{,}{64}{,}{65}{,}{66}{,}{67}{,}{68}{,}{69}{,}{70}{,}{71}{,}{72}{,}{73}{,}{74}{,}{75}{,}{76}{,}{77}{,}{78}{,}{79}{,}{80}{,}{81}{,}{82}{,}{83}{,}{84}{,}{85}{,}{86}{,}{87}{,}{88}{,}{89}{,}{90}{,}{91}{,}{92}{,}{93}{,}{94}{,}{95}{,}{96}{,}{97}{,}{98}{,}{99}{,}{100}{,}{101}{,}{102}{,}{103}{,}{104}{,}{105}{,}{106}{,}{107}{,}{108}{,}{109}{,}{110}{,}{111}{,}{112}{,}{113}{,}{114}{,}{115}{,}{116}{,}{117}{,}{118}{,}{119}{,}{120}{,}{121}{,}{122}{,}{123}{,}{124}{,}{125}{,}{126}{,}{127}{,}{128}{,}{129}{,}{130}{,}{131}{,}{132}{,}{133}{,}{134}{,}{135}{,}{136}{,}{137}{,}{138}{,}{139}{,}{140}{,}{141}{,}{142}{,}{143}{,}{144}{,}{145}{,}{146}{,}{147}{,}{148}{,}{149}{,}{150}{,}{151}{,}{152}{,}{153}{,}{154}{,}{155}{,}{156}{,}{157}{,}{158}{,}{159}{,}{160}{,}{161}{,}{162}{,}{163}{,}{164}{,}{165}{,}{166}{,}{167}{,}{168}{,}{169}{,}{170}{,}{171}{,}{172}{,}{173}{,}{174}{,}{175}{,}{176}{,}{177}{,}{178}{,}{179}{,}{180}{,}{181}{,}{182}{,}{183}{,}{184}{,}{185}{,}{186}{,}{187}{,}{188}{,}{189}{,}{190}{,}{191}{,}{192}{,}{193}{,}{194}{,}{195}{,}{196}{,}{197}{,}{198}{,}{199}{,}{200}{,}{201}{,}{202}{,}{203}{,}{204}{,}{205}{,}{206}{,}{207}{,}{208}{,}{209}{,}{210}{,}{211}{,}{212}{,}{213}{,}{214}{,}{215}{,}{216}{,}{217}{,}{218}{,}{219}{,}{220}{,}{221}{,}{222}{,}{223}{,}{224}{,}{225}{,}{226}{,}{227}{,}{228}{,}{229}{,}{230}{,}{231}{,}{232}{,}{233}{,}{234}{,}{235}{,}{236}{,}{237}{,}{238}{,}{239}{,}{240}{,}{241}{,}{242}{,}{243}{,}{244}{,}{245}{,}{246}{,}{247}{,}{248}{,}{249}{,}{250}{,}{251}{,}{252}{,}{253}{,}{254}{,}{255}{,}{256}{,}{257}{,}{258}{,}{259}{,}{260}{,}{261}{,}{262}{,}{263}{,}{264}{,}{265}{,}{266}{,}{267}{,}{268}{,}{269}{,}{270}{,}{271}{,}{272}{,}{273}{,}{274}{,}{275}{,}{276}{,}{277}{,}{278}{,}{279}{,}{280}{,}{281}{,}{282}{,}{283}{,}{284}{,}{285}{,}{286}{,}{287}{,}{288}{,}{289}{,}{290}{,}{291}{,}{292}{,}{293}{,}{294}{,}{295}{,}{296}{,}{297}{,}{298}{,}{299}{,}{300}{,}{301}{,}{302}{,}{303}{,}{304}{,}{305}{,}{306}{,}{307}{,}{308}{,}{309}{,}{310}{,}{311}{,}{312}{,}{313}{,}{314}{,}{315}{,}{316}{,}{317}{,}{318}{,}{319}{,}{320}{,}{321}{,}{322}{,}{323}{,}{324}{,}{325}{,}{326}{,}{327}{,}{328}{,}{329}{,}{330}{,}{331}{,}{332}{,}{333}{,}{334}{,}{335}{,}{336}{,}{337}{,}{338}{,}{339}{,}{340}{,}{341}{,}{342}{,}{343}{,}{344}{,}{345}{,}{346}{,}{347}{,}{348}{,}{349}{,}{350}{,}{351}{,}{352}{,}{353}{,}{354}{,}{355}{,}{356}{,}{357}{,}{358}{,}{359}{,}{360}{,}{361}{,}{362}{,}{363}{,}{364}{,}{365}{,}{366}{,}{367}{,}{368}{,}{369}{,}{370}{,}{371}{,}{372}{,}{373}{,}{374}{,}{375}{,}{376}{,}{377}{,}{378}{,}{379}{,}{380}{,}{381}{,}{382}{,}{383}{,}{384}{,}{385}{,}{386}{,}{387}{,}{388}{,}{389}{,}{390}{,}{391}{,}{392}{,}{393}{,}{394}{,}{395}{,}{396}{,}{397}{,}{398}{,}{399}{,}{400}{,}{401}{,}{402}{,}{403}{,}{404}{,}{405}{,}{406}{,}{407}{,}{408}{,}{409}{,}{410}{,}{411}{,}{412}{,}{413}{,}{414}{,}{415}{,}{416}{,}{417}{,}{418}{,}{419}{,}{420}{,}{421}{,}{422}{,}{423}{,}{424}{,}{425}{,}{426}{,}{427}{,}{428}{,}{429}{,}{430}{,}{431}{,}{432}{,}{433}{,}{434}{,}{435}{,}{436}{,}{437}{,}{438}{,}{439}{,}{440}{,}{441}{,}{442}{,}{443}{,}{444}{,}{445}{,}{446}{,}{447}{,}{448}{,}{449}{,}{450}{,}{451}{,}{452}{,}{453}{,}{454}{,}{455}{,}{456}{,}{457}{,}{458}{,}{459}{,}{460}{,}{461}{,}{462}{,}{463}{,}{464}{,}{465}{,}{466}{,}{467}{,}{468}{,}{469}{,}{470}{,}{471}{,}{472}{,}{473}{,}{474}{,}{475}{,}{476}{,}{477}{,}{478}{,}{479}{,}{480}{,}{481}{,}{482}{,}{483}{,}{484}{,}{485}{,}{486}{,}{487}{,}{488}{,}{489}{,}{490}{,}{491}{,}{492}{,}{493}{,}{494}{,}{495}{,}{496}{,}{497}{,}{498}{,}{499}{,}{500}{,}{501}{,}{502}{,}{503}{,}{504}{,}{505}{,}{506}{,}{507}{,}{508}{,}{509}{,}{510}{,}{511}{,}{512}{,}{513}{,}{514}{,}{515}{,}{516}{,}{517}{,}{518}{,}{519}{,}{520}{,}{521}{,}{522}{,}{523}{,}{524}{,}{525}{,}{526}{,}{527}{,}{528}{,}{529}{,}{530}{,}{531}{,}{532}{,}{533}{,}{534}{,}{535}{,}{536}{,}{537}{,}{538}{,}{539}{,}{540}{,}{541}{,}{542}{,}{543}{,}{544}{,}{545}{,}{546}{,}{547}{,}{548}{,}{549}{,}{550}{,}{551}{,}{552}{,}{553}{,}{554}{,}{555}{,}{556}{,}{557}{,}{558}{,}{559}{,}{560}{,}{561}{,}{562}{,}{563}{,}{564}{,}{565}{,}{566}{,}{567}{,}{568}{,}{569}{,}{570}{,}{571}{,}{572}{,}{573}{,}{574}{,}{575}{,}{576}{,}{577}{,}{578}{,}{579}{,}{580}{,}{581}{,}{582}{,}{583}{,}{584}{,}{585}{,}{586}{,}{587}{,}{588}{,}{589}{,}{590}{,}{591}{,}{592}{,}{593}{,}{594}{,}{595}{,}{596}{,}{597}{,}{598}{,}{599}{,}{600}{,}{601}{,}{602}{,}{603}{,}{604}{,}{605}{,}{606}{,}{607}{,}{608}{,}{609}{,}{610}{,}{611}{,}{612}{,}{613}{,}{614}{,}{615}{,}{616}{,}{617}{,}{618}{,}{619}{,}{620}{,}{621}{,}{622}{,}{623}{,}{624}{,}{625}{,}{626}{,}{627}{,}{628}{,}{629}{,}{630}{,}{631}{,}{632}{,}{633}{,}{634}{,}{635}{,}{636}{,}{637}{,}{638}{,}{639}{,}{640}{,}{641}{,}{642}{,}{643}{,}{644}{,}{645}{,}{646}{,}{647}{,}{648}{,}{649}{,}{650}{,}{651}{,}{652}{,}{653}{,}{654}{,}{655}{,}{656}{,}{657}{,}{658}{,}{659}{,}{660}{,}{661}{,}{662}{,}{663}{,}{664}{,}{665}{,}{666}{,}{667}{,}{668}{,}{669}{,}{670}{,}{671}{,}{672}{,}{673}{,}{674}{,}{675}{,}{676}{,}{677}{,}{678}{,}{679}{,}{680}{,}{681}{,}{682}{,}{683}{,}{684}{,}{685}{,}{686}{,}{687}{,}{688}{,}{689}{,}{690}{,}{691}{,}{692}{,}{693}{,}{694}{,}{695}{,}{696}{,}{697}{,}{698}{,}{699}{,}{700}{,}{701}{,}{702}{,}{703}{,}{704}{,}{705}{,}{706}{,}{707}{,}{708}{,}{709}{,}{710}{,}{711}{,}{712}{,}{713}{,}{714}{,}{715}{,}{716}{,}{717}{,}{718}{,}{719}{,}{720}{,}{721}{,}{722}{,}{723}{,}{724}{,}{725}{,}{726}{,}{727}{,}{728}{,}{729}{,}{730}{,}{731}{,}{732}{,}{733}{,}{734}{,}{735}{,}{736}{,}{737}{,}{738}{,}{739}{,}{740}{,}{741}{,}{742}{,}{743}{,}{744}{,}{745}{,}{746}{,}{747}{,}{748}{,}{749}{,}{750}{,}{751}{,}{752}{,}{753}{,}{754}{,}{755}{,}{756}{,}{757}{,}{758}{,}{759}{,}{760}{,}{761}{,}{762}{,}{763}{,}{764}{,}{765}{,}{766}{,}{767}{,}{768}\right]{,}{\mathrm{columns}}{=}\left[{\mathrm{Pregnancies}}{,}{\mathrm{Glucose}}{,}{\mathrm{BloodPressure}}{,}{\mathrm{SkinThickness}}{,}{\mathrm{Insulin}}{,}{\mathrm{BMI}}{,}{\mathrm{DiabetesPedigreeFunction}}{,}{\mathrm{Age}}{,}{\mathrm{Outcome}}\right]\right)$ (2.1.1)

As before, we divide the dataset into training and test data.  We are attempting to predict the last column, Outcome.

 > $\mathrm{training_data},\mathrm{test_data}≔\mathrm{dataset}\left[1..600,..\right],\mathrm{dataset}\left[601..-1,..\right]$
 ${\mathrm{training_data}}{,}{\mathrm{test_data}}{≔}\begin{array}{c}\left[\begin{array}{cccccccccc}{}& {\mathrm{Pregnancies}}& {\mathrm{Glucose}}& {\mathrm{BloodPressure}}& {\mathrm{SkinThickness}}& {\mathrm{Insulin}}& {\mathrm{BMI}}& {\mathrm{DiabetesPedigreeFunction}}& {\mathrm{Age}}& {\mathrm{Outcome}}\\ {1}& {6}& {148}& {72}& {35}& {0}& {33.6}& {0.627}& {50}& {1}\\ {2}& {1}& {85}& {66}& {29}& {0}& {26.6}& {0.351}& {31}& {0}\\ {3}& {8}& {183}& {64}& {0}& {0}& {23.3}& {0.672}& {32}& {1}\\ {4}& {1}& {89}& {66}& {23}& {94}& {28.1}& {0.167}& {21}& {0}\\ {5}& {0}& {137}& {40}& {35}& {168}& {43.1}& {2.288}& {33}& {1}\\ {6}& {5}& {116}& {74}& {0}& {0}& {25.6}& {0.201}& {30}& {0}\\ {7}& {3}& {78}& {50}& {32}& {88}& {31.0}& {0.248}& {26}& {1}\\ {8}& {10}& {115}& {0}& {0}& {0}& {35.3}& {0.134}& {29}& {0}\\ {9}& {2}& {197}& {70}& {45}& {543}& {30.5}& {0.158}& {53}& {1}\\ {10}& {8}& {125}& {96}& {0}& {0}& {0.}& {0.232}& {54}& {1}\\ {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}\end{array}\right]\\ \hfill {\text{600 x 9 DataFrame}}\end{array}{,}\begin{array}{c}\left[\begin{array}{cccccccccc}{}& {\mathrm{Pregnancies}}& {\mathrm{Glucose}}& {\mathrm{BloodPressure}}& {\mathrm{SkinThickness}}& {\mathrm{Insulin}}& {\mathrm{BMI}}& {\mathrm{DiabetesPedigreeFunction}}& {\mathrm{Age}}& {\mathrm{Outcome}}\\ {601}& {1}& {108}& {88}& {19}& {0}& {27.1}& {0.400}& {24}& {0}\\ {602}& {6}& {96}& {0}& {0}& {0}& {23.7}& {0.190}& {28}& {0}\\ {603}& {1}& {124}& {74}& {36}& {0}& {27.8}& {0.100}& {30}& {0}\\ {604}& {7}& {150}& {78}& {29}& {126}& {35.2}& {0.692}& {54}& {1}\\ {605}& {4}& {183}& {0}& {0}& {0}& {28.4}& {0.212}& {36}& {1}\\ {606}& {1}& {124}& {60}& {32}& {0}& {35.8}& {0.514}& {21}& {0}\\ {607}& {1}& {181}& {78}& {42}& {293}& {40.0}& {1.258}& {22}& {1}\\ {608}& {1}& {92}& {62}& {25}& {41}& {19.5}& {0.482}& {25}& {0}\\ {609}& {0}& {152}& {82}& {39}& {272}& {41.5}& {0.270}& {27}& {0}\\ {610}& {1}& {111}& {62}& {13}& {182}& {24.0}& {0.138}& {23}& {0}\\ {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}& {⋮}\end{array}\right]\\ \hfill {\text{168 x 9 DataFrame}}\end{array}$ (2.1.2)

We define a neural network using the Sequential command which stacks one or more neural network layers.

 > $\mathrm{model}≔\mathrm{Sequential}\left(\left[\mathrm{DenseLayer}\left(12,\mathrm{activation}="relu"\right),\mathrm{DenseLayer}\left(8,\mathrm{activation}="relu"\right),\mathrm{DenseLayer}\left(1,\mathrm{activation}="sigmoid"\right)\right]\right)$
 ${\mathrm{DeepLearning}}{:-}{\mathrm{Model}}{}\left({">"}\right)$ (2.1.3)
 > $\mathrm{model}:-\mathrm{Compile}\left(\mathrm{loss}="binary_crossentropy",\mathrm{optimizer}="adam",\mathrm{metrics}=\left["accuracy"\right]\right)$
 ${\mathrm{Python}}{:-}{\mathrm{None}}$ (2.1.4)

We can train the data easily with the Fit command:

 > $\mathrm{model}:-\mathrm{Fit}\left(\mathrm{training_data}\left[..,1..8\right],\mathrm{training_data}\left[\mathrm{Outcome}\right],\mathrm{epochs}=150,\mathrm{batchsize}=10\right)$
 ${">"}$ (2.1.5)

We now have a trained model whose accuracy we can test against the test data  or against any new data. The accuracy is not especially high but nevertheless useful for predictive purposes.

 > $\mathrm{model}:-\mathrm{Evaluate}\left(\mathrm{test_data}\left[..,1..8\right],\mathrm{test_data}\left[\mathrm{Outcome}\right]\right)$
 $\left\{{"loss"}{=}{0.613269329071045}{,}{"accuracy"}{=}{0.690476179122925}\right\}$ (2.1.6)

To get a sense of what how this model behaves on individuals within the dataset, we can take a slice from the test data and compare the observed vs. predicted outcome.

 > $\mathrm{predictions}≔\mathrm{model}:-\mathrm{Predict}\left(\mathrm{test_data}\left[760..768,1..8\right]\right)$
 $\left[\begin{array}{c}0.22227591276168823\\ 0.1320905089378357\\ 0.561888575553894\\ 0.10922238230705261\\ 0.30042001605033875\\ 0.2347947061061859\\ 0.2265433967113495\\ 0.16276419162750244\\ 0.14439503848552704\end{array}\right]$ (2.1.7)
 > $\mathrm{test_data}\left[760..768,\mathrm{Outcome}\right],\mathrm{predictions}$
 $\left[\begin{array}{cc}{760}& {1}\\ {761}& {0}\\ {762}& {1}\\ {763}& {0}\\ {764}& {0}\\ {765}& {0}\\ {766}& {0}\\ {767}& {1}\\ {768}& {0}\end{array}\right]{,}\left[\begin{array}{c}{0.222275912761688}\\ {0.132090508937836}\\ {0.561888575553894}\\ {0.109222382307053}\\ {0.300420016050339}\\ {0.234794706106186}\\ {0.226543396711349}\\ {0.162764191627502}\\ {0.144395038485527}\end{array}\right]$ (2.1.8)

Details

 • The DeepLearning package is implemented using Google TensorFlow™ and now provides access to a subset of the TensorFlow Python API, version 2.2.0.
 • The DeepLearning package is currently not supported on the following platforms: Macs powered by Apple's M1 chip (Apple Silicon).