Subtractor

implement an 3-digit subtractor by Neural Network

ref:https://github.com/IKMLab/Adder-practice

Requirements

pip install -r requirements.txt

Run

python main.py

Generate Data

Generating data...
Total addition questions: 200000
['3-93   ', '6-5    ', '3-71   ', '5-2    ', '187-5  '] ['-90 ', '1   ', '-68 ', '3   ', '182 ']
Vectorization...
Training Data:
(45000, 7, 12)
(45000, 4, 12)
Validation Data:
(5000, 7, 12)
(5000, 4, 12)
Testing Data:
(150000, 7, 12)
(150000, 4, 12)

Define Model

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 128)               72192     
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 4, 128)            0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 4, 128)            131584    
_________________________________________________________________
lstm_3 (LSTM)                (None, 4, 128)            131584    
_________________________________________________________________
time_distributed_1 (TimeDist (None, 4, 12)             1548      
_________________________________________________________________
activation_1 (Activation)    (None, 4, 12)             0         
=================================================================
Total params: 336,908
Trainable params: 336,908
Non-trainable params: 0
_________________________________________________________________

Training

--------------------------------------------------
Iteration 0
Train on 45000 samples, validate on 5000 samples
Epoch 1/1
  128/45000 [..............................] - ETA: 8:30 - loss: 2.4848 - acc: 0  384/45000 [..............................] - ETA: 2:56 - loss: 2.4824 - acc: 0  640/45000 [..............................] - ETA: 1:50 - loss: 2.4782 - acc: 0  896/45000 [..............................] - ETA: 1:21 - loss: 2.4737 - acc: 0 1152/45000 [..............................] - ETA: 1:05 - loss: 2.4664 - acc: 0 1408/45000 [..............................] - ETA: 55s - loss: 2.4590 - acc: 0. 1664/45000 [>.............................] - ETA: 48s - loss: 2.4444 - acc: 0. 1920/45000 [>.............................] - ETA: 43s - loss: 2.4332 - acc: 0. 2176/45000 [>.............................] - ETA: 39s - loss: 2.4205 - acc: 0. 2432/45000 [>.............................] - ETA: 35s - loss: 2.4130 - acc: 0. 2688/45000 [>.............................] - ETA: 33s - loss: 2.4039 - acc: 0. 2944/45000 [>.............................] - ETA: 31s - loss: 2.3991 - acc: 0. 3200/45000 [=>............................] - ETA: 29s - loss: 2.3932 - acc: 0. 3456/45000 [=>............................] - ETA: 27s - loss: 2.3853 - acc: 0. 3712/45000 [=>............................] - ETA: 26s - loss: 2.3813 - acc: 0. 3968/45000 [=>............................] - ETA: 24s - loss: 2.3783 - acc: 0. 4224/45000 [=>............................] - ETA: 23s - loss: 2.3762 - acc: 0. 4480/45000 [=>............................] - ETA: 22s - loss: 2.3712 - acc: 0. 4736/45000 [==>...........................] - ETA: 21s - loss: 2.3680 - acc: 0. 4992/45000 [==>...........................] - ETA: 21s - loss: 2.3631 - acc: 0. 5248/45000 [==>...........................] - ETA: 20s - loss: 2.3594 - acc: 0. 5504/45000 [==>...........................] - ETA: 19s - loss: 2.3560 - acc: 0. 5760/45000 [==>...........................] - ETA: 19s - loss: 2.3521 - acc: 0. 6016/45000 [===>..........................] - ETA: 18s - loss: 2.3491 - acc: 0. 6272/45000 [===>..........................] - ETA: 18s - loss: 2.3462 - acc: 0. 6528/45000 [===>..........................] - ETA: 17s - loss: 2.3432 - acc: 0. 6784/45000 [===>..........................] - ETA: 17s - loss: 2.3402 - acc: 0. 7040/45000 [===>..........................] - ETA: 16s - loss: 2.3358 - acc: 0. 7296/45000 [===>..........................] - ETA: 16s - loss: 2.3328 - acc: 0. 7552/45000 [====>.........................] - ETA: 15s - loss: 2.3305 - acc: 0. 7808/45000 [====>.........................] - ETA: 15s - loss: 2.3273 - acc: 0. 8064/45000 [====>.........................] - ETA: 15s - loss: 2.3256 - acc: 0. 8320/45000 [====>.........................] - ETA: 14s - loss: 2.3240 - acc: 0. 8576/45000 [====>.........................] - ETA: 14s - loss: 2.3218 - acc: 0. 8832/45000 [====>.........................] - ETA: 14s - loss: 2.3194 - acc: 0. 9088/45000 [=====>........................] - ETA: 14s - loss: 2.3169 - acc: 0. 9344/45000 [=====>........................] - ETA: 13s - loss: 2.3141 - acc: 0. 9600/45000 [=====>........................] - ETA: 13s - loss: 2.3122 - acc: 0. 9856/45000 [=====>........................] - ETA: 13s - loss: 2.3101 - acc: 0.10112/45000 [=====>........................] - ETA: 13s - loss: 2.3081 - acc: 0.10368/45000 [=====>........................] - ETA: 12s - loss: 2.3059 - acc: 0.10624/45000 [======>.......................] - ETA: 12s - loss: 2.3033 - acc: 0.10880/45000 [======>.......................] - ETA: 12s - loss: 2.3009 - acc: 0.11136/45000 [======>.......................] - ETA: 12s - loss: 2.2991 - acc: 0.11392/45000 [======>.......................] - ETA: 12s - loss: 2.2961 - acc: 0.11648/45000 [======>.......................] - ETA: 11s - loss: 2.2928 - acc: 0.11904/45000 [======>.......................] - ETA: 11s - loss: 2.2904 - acc: 0.12160/45000 [=======>......................] - ETA: 11s - loss: 2.2876 - acc: 0.12416/45000 [=======>......................] - ETA: 11s - loss: 2.2847 - acc: 0.12672/45000 [=======>......................] - ETA: 11s - loss: 2.2816 - acc: 0.12928/45000 [=======>......................] - ETA: 11s - loss: 2.2790 - acc: 0.13184/45000 [=======>......................] - ETA: 10s - loss: 2.2768 - acc: 0.13440/45000 [=======>......................] - ETA: 10s - loss: 2.2739 - acc: 0.13696/45000 [========>.....................] - ETA: 10s - loss: 2.2717 - acc: 0.13952/45000 [========>.....................] - ETA: 10s - loss: 2.2687 - acc: 0.14208/45000 [========>.....................] - ETA: 10s - loss: 2.2655 - acc: 0.14464/45000 [========>.....................] - ETA: 10s - loss: 2.2621 - acc: 0.14720/45000 [========>.....................] - ETA: 10s - loss: 2.2583 - acc: 0.14976/45000 [========>.....................] - ETA: 9s - loss: 2.2546 - acc: 0.215232/45000 [=========>....................] - ETA: 9s - loss: 2.2511 - acc: 0.215488/45000 [=========>....................] - ETA: 9s - loss: 2.2471 - acc: 0.215744/45000 [=========>....................] - ETA: 9s - loss: 2.2428 - acc: 0.216000/45000 [=========>....................] - ETA: 9s - loss: 2.2381 - acc: 0.216256/45000 [=========>....................] - ETA: 9s - loss: 2.2333 - acc: 0.216512/45000 [==========>...................] - ETA: 9s - loss: 2.2285 - acc: 0.216768/45000 [==========>...................] - ETA: 9s - loss: 2.2241 - acc: 0.217024/45000 [==========>...................] - ETA: 8s - loss: 2.2203 - acc: 0.217280/45000 [==========>...................] - ETA: 8s - loss: 2.2163 - acc: 0.217536/45000 [==========>...................] - ETA: 8s - loss: 2.2117 - acc: 0.217792/45000 [==========>...................] - ETA: 8s - loss: 2.2071 - acc: 0.218048/45000 [===========>..................] - ETA: 8s - loss: 2.2032 - acc: 0.218304/45000 [===========>..................] - ETA: 8s - loss: 2.1989 - acc: 0.218560/45000 [===========>..................] - ETA: 8s - loss: 2.1946 - acc: 0.218816/45000 [===========>..................] - ETA: 8s - loss: 2.1905 - acc: 0.219072/45000 [===========>..................] - ETA: 8s - loss: 2.1868 - acc: 0.219328/45000 [===========>..................] - ETA: 7s - loss: 2.1825 - acc: 0.219584/45000 [============>.................] - ETA: 7s - loss: 2.1785 - acc: 0.219840/45000 [============>.................] - ETA: 7s - loss: 2.1741 - acc: 0.220096/45000 [============>.................] - ETA: 7s - loss: 2.1698 - acc: 0.220352/45000 [============>.................] - ETA: 7s - loss: 2.1659 - acc: 0.220608/45000 [============>.................] - ETA: 7s - loss: 2.1620 - acc: 0.220864/45000 [============>.................] - ETA: 7s - loss: 2.1583 - acc: 0.221120/45000 [=============>................] - ETA: 7s - loss: 2.1545 - acc: 0.221376/45000 [=============>................] - ETA: 7s - loss: 2.1511 - acc: 0.221632/45000 [=============>................] - ETA: 7s - loss: 2.1474 - acc: 0.221888/45000 [=============>................] - ETA: 6s - loss: 2.1440 - acc: 0.222144/45000 [=============>................] - ETA: 6s - loss: 2.1403 - acc: 0.222400/45000 [=============>................] - ETA: 6s - loss: 2.1365 - acc: 0.222656/45000 [==============>...............] - ETA: 6s - loss: 2.1331 - acc: 0.222912/45000 [==============>...............] - ETA: 6s - loss: 2.1295 - acc: 0.223168/45000 [==============>...............] - ETA: 6s - loss: 2.1259 - acc: 0.223424/45000 [==============>...............] - ETA: 6s - loss: 2.1226 - acc: 0.223680/45000 [==============>...............] - ETA: 6s - loss: 2.1189 - acc: 0.223936/45000 [==============>...............] - ETA: 6s - loss: 2.1155 - acc: 0.224192/45000 [===============>..............] - ETA: 6s - loss: 2.1124 - acc: 0.224448/45000 [===============>..............] - ETA: 6s - loss: 2.1092 - acc: 0.224704/45000 [===============>..............] - ETA: 5s - loss: 2.1060 - acc: 0.224960/45000 [===============>..............] - ETA: 5s - loss: 2.1030 - acc: 0.225216/45000 [===============>..............] - ETA: 5s - loss: 2.1000 - acc: 0.225472/45000 [===============>..............] - ETA: 5s - loss: 2.0970 - acc: 0.225728/45000 [================>.............] - ETA: 5s - loss: 2.0940 - acc: 0.225984/45000 [================>.............] - ETA: 5s - loss: 2.0910 - acc: 0.226240/45000 [================>.............] - ETA: 5s - loss: 2.0879 - acc: 0.226496/45000 [================>.............] - ETA: 5s - loss: 2.0850 - acc: 0.226752/45000 [================>.............] - ETA: 5s - loss: 2.0821 - acc: 0.227008/45000 [=================>............] - ETA: 5s - loss: 2.0796 - acc: 0.227264/45000 [=================>............] - ETA: 5s - loss: 2.0774 - acc: 0.227520/45000 [=================>............] - ETA: 5s - loss: 2.0754 - acc: 0.227776/45000 [=================>............] - ETA: 4s - loss: 2.0732 - acc: 0.228032/45000 [=================>............] - ETA: 4s - loss: 2.0708 - acc: 0.228288/45000 [=================>............] - ETA: 4s - loss: 2.0683 - acc: 0.228544/45000 [==================>...........] - ETA: 4s - loss: 2.0657 - acc: 0.228800/45000 [==================>...........] - ETA: 4s - loss: 2.0630 - acc: 0.229056/45000 [==================>...........] - ETA: 4s - loss: 2.0605 - acc: 0.229312/45000 [==================>...........] - ETA: 4s - loss: 2.0580 - acc: 0.229568/45000 [==================>...........] - ETA: 4s - loss: 2.0556 - acc: 0.229824/45000 [==================>...........] - ETA: 4s - loss: 2.0533 - acc: 0.230080/45000 [===================>..........] - ETA: 4s - loss: 2.0510 - acc: 0.230336/45000 [===================>..........] - ETA: 4s - loss: 2.0486 - acc: 0.230592/45000 [===================>..........] - ETA: 4s - loss: 2.0465 - acc: 0.230848/45000 [===================>..........] - ETA: 3s - loss: 2.0444 - acc: 0.231104/45000 [===================>..........] - ETA: 3s - loss: 2.0422 - acc: 0.231360/45000 [===================>..........] - ETA: 3s - loss: 2.0401 - acc: 0.231616/45000 [====================>.........] - ETA: 3s - loss: 2.0382 - acc: 0.231872/45000 [====================>.........] - ETA: 3s - loss: 2.0360 - acc: 0.232128/45000 [====================>.........] - ETA: 3s - loss: 2.0342 - acc: 0.232384/45000 [====================>.........] - ETA: 3s - loss: 2.0320 - acc: 0.232640/45000 [====================>.........] - ETA: 3s - loss: 2.0298 - acc: 0.232896/45000 [====================>.........] - ETA: 3s - loss: 2.0276 - acc: 0.233152/45000 [=====================>........] - ETA: 3s - loss: 2.0256 - acc: 0.233408/45000 [=====================>........] - ETA: 3s - loss: 2.0236 - acc: 0.233664/45000 [=====================>........] - ETA: 3s - loss: 2.0214 - acc: 0.233920/45000 [=====================>........] - ETA: 3s - loss: 2.0194 - acc: 0.234176/45000 [=====================>........] - ETA: 2s - loss: 2.0174 - acc: 0.234432/45000 [=====================>........] - ETA: 2s - loss: 2.0153 - acc: 0.234688/45000 [======================>.......] - ETA: 2s - loss: 2.0134 - acc: 0.234944/45000 [======================>.......] - ETA: 2s - loss: 2.0113 - acc: 0.235200/45000 [======================>.......] - ETA: 2s - loss: 2.0093 - acc: 0.235456/45000 [======================>.......] - ETA: 2s - loss: 2.0072 - acc: 0.235712/45000 [======================>.......] - ETA: 2s - loss: 2.0052 - acc: 0.235968/45000 [======================>.......] - ETA: 2s - loss: 2.0035 - acc: 0.236224/45000 [=======================>......] - ETA: 2s - loss: 2.0016 - acc: 0.236480/45000 [=======================>......] - ETA: 2s - loss: 1.9997 - acc: 0.236736/45000 [=======================>......] - ETA: 2s - loss: 1.9979 - acc: 0.236992/45000 [=======================>......] - ETA: 2s - loss: 1.9961 - acc: 0.237248/45000 [=======================>......] - ETA: 2s - loss: 1.9941 - acc: 0.237504/45000 [========================>.....] - ETA: 2s - loss: 1.9922 - acc: 0.237760/45000 [========================>.....] - ETA: 1s - loss: 1.9904 - acc: 0.238016/45000 [========================>.....] - ETA: 1s - loss: 1.9887 - acc: 0.238272/45000 [========================>.....] - ETA: 1s - loss: 1.9869 - acc: 0.238528/45000 [========================>.....] - ETA: 1s - loss: 1.9849 - acc: 0.238784/45000 [========================>.....] - ETA: 1s - loss: 1.9832 - acc: 0.339040/45000 [=========================>....] - ETA: 1s - loss: 1.9814 - acc: 0.339296/45000 [=========================>....] - ETA: 1s - loss: 1.9798 - acc: 0.339552/45000 [=========================>....] - ETA: 1s - loss: 1.9779 - acc: 0.339808/45000 [=========================>....] - ETA: 1s - loss: 1.9761 - acc: 0.340064/45000 [=========================>....] - ETA: 1s - loss: 1.9745 - acc: 0.340320/45000 [=========================>....] - ETA: 1s - loss: 1.9730 - acc: 0.340576/45000 [==========================>...] - ETA: 1s - loss: 1.9713 - acc: 0.340832/45000 [==========================>...] - ETA: 1s - loss: 1.9696 - acc: 0.341088/45000 [==========================>...] - ETA: 1s - loss: 1.9681 - acc: 0.341344/45000 [==========================>...] - ETA: 0s - loss: 1.9665 - acc: 0.341600/45000 [==========================>...] - ETA: 0s - loss: 1.9650 - acc: 0.341856/45000 [==========================>...] - ETA: 0s - loss: 1.9635 - acc: 0.342112/45000 [===========================>..] - ETA: 0s - loss: 1.9619 - acc: 0.342368/45000 [===========================>..] - ETA: 0s - loss: 1.9602 - acc: 0.342624/45000 [===========================>..] - ETA: 0s - loss: 1.9585 - acc: 0.342880/45000 [===========================>..] - ETA: 0s - loss: 1.9570 - acc: 0.343136/45000 [===========================>..] - ETA: 0s - loss: 1.9554 - acc: 0.343392/45000 [===========================>..] - ETA: 0s - loss: 1.9537 - acc: 0.343648/45000 [============================>.] - ETA: 0s - loss: 1.9522 - acc: 0.343904/45000 [============================>.] - ETA: 0s - loss: 1.9507 - acc: 0.344160/45000 [============================>.] - ETA: 0s - loss: 1.9490 - acc: 0.344416/45000 [============================>.] - ETA: 0s - loss: 1.9474 - acc: 0.344672/45000 [============================>.] - ETA: 0s - loss: 1.9460 - acc: 0.344928/45000 [============================>.] - ETA: 0s - loss: 1.9446 - acc: 0.345000/45000 [==============================] - 12s 275us/step - loss: 1.9442 - acc: 0.3103 - val_loss: 1.6933 - val_acc: 0.3744
Q 89-8    T 81   ☒ 366 
Q 0-956   T -956 ☒ -886
Q 531-920 T -389 ☒ -266
Q 324-878 T -554 ☒ -466
Q 797-194 T 603  ☒ 366 
Q 538-309 T 229  ☒ -1  
Q 21-863  T -842 ☒ -866
Q 15-71   T -56  ☒ -1  
Q 1-732   T -731 ☒ -666
Q 66-409  T -343 ☒ -466

--------------------------------------------------

Result(Validation)

Q 713-263 T 450  ☑ 450 
Q 534-886 T -352 ☑ -352
Q 557-274 T 283  ☑ 283 
Q 606-649 T -43  ☑ -43 
Q 797-663 T 134  ☑ 134 
Q 759-379 T 380  ☑ 380 
Q 952-277 T 675  ☑ 675 
Q 639-565 T 74   ☑ 74  
Q 972-450 T 522  ☑ 522 
Q 49-464  T -415 ☒ -523
Q 202-717 T -515 ☑ -515
Q 720-939 T -219 ☑ -219
Q 430-66  T 364  ☒ -236
Q 558-410 T 148  ☑ 148 
Q 766-216 T 550  ☑ 550 
Q 386-303 T 83   ☑ 83  
Q 813-432 T 381  ☑ 381 
Q 848-642 T 206  ☑ 206 
Q 921-942 T -21  ☑ -21 
Q 822-820 T 2    ☒ 1   

...

MSG : Accuracy is 0.8609