{
  "id": 434354,
  "title": "95th Bronze solutions",
  "url": "/competitions/asl-fingerspelling/discussion/434354",
  "author_name": "suguuuuu",
  "post_date": "2023-08-25T00:01:12.515000",
  "votes": 9,
  "comment_count": 3,
  "views": 0,
  "content": "<h1>95th Bronze solutions</h1>\n<p>Thanks to Kaggle for hosting this interesting competition!!!!<br>\nThis competition was diffucult for us…<br>\nThere were many differences from last competition which made it challenging. I enjoyed learning about transcription task.</p>\n<h1>Summary</h1>\n<p>We utilized the best public notebook with some modifications.</p>\n<ul>\n<li>base notebook: <a href=\"https://www.kaggle.com/code/saidineshpola/aslfr-ctc-based-on-prev-comp-1st-place\" target=\"_blank\">https://www.kaggle.com/code/saidineshpola/aslfr-ctc-based-on-prev-comp-1st-place</a></li>\n</ul>\n<h1>What changes were made from the public notebook?</h1>\n<ul>\n<li><p>Normalization (+0.002 LB)</p>\n<ul>\n<li>Adjusted all coordinates so that the center of numbers 11 and 12 is set to 0.<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F6d424a3976cee8f769e3e90ba54a9ac2%2Finbox_2930242_fa394dbd96e33fb875aef6ed1f25c757_1.png?generation=1692922021894426&amp;alt=media\" alt=\"\"></li></ul></li>\n<li><p>Added more features (+0.01 LB)</p>\n<ul>\n<li>Motion, Shape Feature, <ul>\n<li>Shape is  distance of this point<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F3f7fdc56a208576b7664408fd807e422%2Finbox_2930242_b739316822c577ef9b4be204325f569e_2.png?generation=1692922063719858&amp;alt=media\" alt=\"\"></li></ul></li></ul></li>\n<li><p>Feature Augmentation (+0.01 LB)</p>\n<ul>\n<li>Framerate, randomDrop, random padding, random crop.</li></ul></li>\n<li><p>Changed Model (+0.005 LB)</p>\n<ul>\n<li>dim : 384 =&gt; 192</li>\n<li>conv trans Block num : 3=&gt;10</li>\n<li>Add aux Loss</li></ul></li>\n<li><p>Pretraining with supplementay data (+0.01 LB)</p></li>\n<li><p>Training params</p>\n<ul>\n<li>epoch 100</li>\n<li>batchsize 256</li>\n<li>learningrate 1e-2</li></ul></li>\n</ul>\n<h1>Things I couldn't do</h1>\n<ul>\n<li>Error correction Network.<ul>\n<li>I read the following paper and tried to incorporate voice recognition technology, but I couldn't make it in time.</li>\n<li><a href=\"https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjAkrKRvvaAAxWBO3AKHbDkB4MQFnoECBMQAQ&amp;url=https%3A%2F%2Farxiv.org%2Fabs%2F2111.01690&amp;usg=AOvVaw3B--e8pJqXTaYolWYXIBOf&amp;opi=89978449\" target=\"_blank\">https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjAkrKRvvaAAxWBO3AKHbDkB4MQFnoECBMQAQ&amp;url=https%3A%2F%2Farxiv.org%2Fabs%2F2111.01690&amp;usg=AOvVaw3B--e8pJqXTaYolWYXIBOf&amp;opi=89978449</a></li></ul></li>\n<li>Change to SOTA OCR model.<ul>\n<li><a href=\"https://arxiv.org/pdf/2205.00159.pdf\" target=\"_blank\">https://arxiv.org/pdf/2205.00159.pdf</a></li></ul></li>\n</ul>\n<h1>Appendix: Model code</h1>\n<pre><code>def get:\n    inp = tf.keras.\n\n    x = tf.keras.layers.(inp)\n    x = tf.keras.layers.(x) + positional\n    x = tf.keras.layers.(x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x_aux = (x)\n\n    x = (x_aux)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    # main\n    x = tf.keras.layers.(x)\n    x = tf.keras.layers.(x)\n    x = tf.keras.layers.,name='out')(x)\n\n    #aux\n    x_aux = tf.keras.layers.(x_aux)\n    x_aux = tf.keras.layers.(x_aux)\n    x_aux = tf.keras.layers.,name='aux_out')(x_aux)    \n\n    model = tf.keras.\n\n    loss = {\n        'out':CTCLoss,\n        'aux_out':CTCLoss\n    }\n\n    # Adam Optimizer\n    optimizer = tfa.optimizers.\n    optimizer = tfa.optimizers.\n\n    model.compile(loss=loss, optimizer=optimizer)\n\n    return model\n</code></pre>",
  "messages": [
    {
      "id": 2407195,
      "postDate": "2023-08-25T00:01:12.517Z",
      "content": "<h1>95th Bronze solutions</h1>\n<p>Thanks to Kaggle for hosting this interesting competition!!!!<br>\nThis competition was diffucult for us…<br>\nThere were many differences from last competition which made it challenging. I enjoyed learning about transcription task.</p>\n<h1>Summary</h1>\n<p>We utilized the best public notebook with some modifications.</p>\n<ul>\n<li>base notebook: <a href=\"https://www.kaggle.com/code/saidineshpola/aslfr-ctc-based-on-prev-comp-1st-place\" target=\"_blank\">https://www.kaggle.com/code/saidineshpola/aslfr-ctc-based-on-prev-comp-1st-place</a></li>\n</ul>\n<h1>What changes were made from the public notebook?</h1>\n<ul>\n<li><p>Normalization (+0.002 LB)</p>\n<ul>\n<li>Adjusted all coordinates so that the center of numbers 11 and 12 is set to 0.<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F6d424a3976cee8f769e3e90ba54a9ac2%2Finbox_2930242_fa394dbd96e33fb875aef6ed1f25c757_1.png?generation=1692922021894426&amp;alt=media\" alt=\"\"></li></ul></li>\n<li><p>Added more features (+0.01 LB)</p>\n<ul>\n<li>Motion, Shape Feature, <ul>\n<li>Shape is  distance of this point<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F3f7fdc56a208576b7664408fd807e422%2Finbox_2930242_b739316822c577ef9b4be204325f569e_2.png?generation=1692922063719858&amp;alt=media\" alt=\"\"></li></ul></li></ul></li>\n<li><p>Feature Augmentation (+0.01 LB)</p>\n<ul>\n<li>Framerate, randomDrop, random padding, random crop.</li></ul></li>\n<li><p>Changed Model (+0.005 LB)</p>\n<ul>\n<li>dim : 384 =&gt; 192</li>\n<li>conv trans Block num : 3=&gt;10</li>\n<li>Add aux Loss</li></ul></li>\n<li><p>Pretraining with supplementay data (+0.01 LB)</p></li>\n<li><p>Training params</p>\n<ul>\n<li>epoch 100</li>\n<li>batchsize 256</li>\n<li>learningrate 1e-2</li></ul></li>\n</ul>\n<h1>Things I couldn't do</h1>\n<ul>\n<li>Error correction Network.<ul>\n<li>I read the following paper and tried to incorporate voice recognition technology, but I couldn't make it in time.</li>\n<li><a href=\"https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjAkrKRvvaAAxWBO3AKHbDkB4MQFnoECBMQAQ&amp;url=https%3A%2F%2Farxiv.org%2Fabs%2F2111.01690&amp;usg=AOvVaw3B--e8pJqXTaYolWYXIBOf&amp;opi=89978449\" target=\"_blank\">https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjAkrKRvvaAAxWBO3AKHbDkB4MQFnoECBMQAQ&amp;url=https%3A%2F%2Farxiv.org%2Fabs%2F2111.01690&amp;usg=AOvVaw3B--e8pJqXTaYolWYXIBOf&amp;opi=89978449</a></li></ul></li>\n<li>Change to SOTA OCR model.<ul>\n<li><a href=\"https://arxiv.org/pdf/2205.00159.pdf\" target=\"_blank\">https://arxiv.org/pdf/2205.00159.pdf</a></li></ul></li>\n</ul>\n<h1>Appendix: Model code</h1>\n<pre><code>def get:\n    inp = tf.keras.\n\n    x = tf.keras.layers.(inp)\n    x = tf.keras.layers.(x) + positional\n    x = tf.keras.layers.(x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x_aux = (x)\n\n    x = (x_aux)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    x = (x)\n    x = (x)\n    x = (x)\n    x = (x)\n\n    # main\n    x = tf.keras.layers.(x)\n    x = tf.keras.layers.(x)\n    x = tf.keras.layers.,name='out')(x)\n\n    #aux\n    x_aux = tf.keras.layers.(x_aux)\n    x_aux = tf.keras.layers.(x_aux)\n    x_aux = tf.keras.layers.,name='aux_out')(x_aux)    \n\n    model = tf.keras.\n\n    loss = {\n        'out':CTCLoss,\n        'aux_out':CTCLoss\n    }\n\n    # Adam Optimizer\n    optimizer = tfa.optimizers.\n    optimizer = tfa.optimizers.\n\n    model.compile(loss=loss, optimizer=optimizer)\n\n    return model\n</code></pre>",
      "rawMarkdown": "# 95th Bronze solutions\n\nThanks to Kaggle for hosting this interesting competition!!!!\nThis competition was diffucult for us…\nThere were many differences from last competition which made it challenging. I enjoyed learning about transcription task.\n\n# Summary\nWe utilized the best public notebook with some modifications.\n- base notebook: https://www.kaggle.com/code/saidineshpola/aslfr-ctc-based-on-prev-comp-1st-place\n\n# What changes were made from the public notebook?\n* Normalization (+0.002 LB)\n\t* Adjusted all coordinates so that the center of numbers 11 and 12 is set to 0.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F6d424a3976cee8f769e3e90ba54a9ac2%2Finbox_2930242_fa394dbd96e33fb875aef6ed1f25c757_1.png?generation=1692922021894426&alt=media)\n* Added more features (+0.01 LB)\n\t* Motion, Shape Feature, \n\t\t* Shape is  distance of this point\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F3f7fdc56a208576b7664408fd807e422%2Finbox_2930242_b739316822c577ef9b4be204325f569e_2.png?generation=1692922063719858&alt=media)\n\n* Feature Augmentation (+0.01 LB)\n\t* Framerate, randomDrop, random padding, random crop.\n* Changed Model (+0.005 LB)\n\t* dim : 384 => 192\n\t* conv trans Block num : 3=>10\n\t* Add aux Loss\n* Pretraining with supplementay data (+0.01 LB)\n* Training params\n\t* epoch 100\n\t* batchsize 256\n\t* learningrate 1e-2\n\n# Things I couldn't do\n* Error correction Network.\n\t* I read the following paper and tried to incorporate voice recognition technology, but I couldn't make it in time.\n\t* https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjAkrKRvvaAAxWBO3AKHbDkB4MQFnoECBMQAQ&url=https%3A%2F%2Farxiv.org%2Fabs%2F2111.01690&usg=AOvVaw3B--e8pJqXTaYolWYXIBOf&opi=89978449\n* Change to SOTA OCR model.\n\t* https://arxiv.org/pdf/2205.00159.pdf\n\n# Appendix: Model code\n```\ndef get_model(dim = 192):\n    inp = tf.keras.Input(INPUT_SHAPE)\n    \n    x = tf.keras.layers.Masking(mask_value=0.0)(inp)\n    x = tf.keras.layers.Dense(dim, use_bias=False,name='stem_conv')(x) + positional_encoding(INPUT_SHAPE[0], dim)\n    x = tf.keras.layers.BatchNormalization(momentum=0.95,name='stem_bn')(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x_aux = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x_aux)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    # main\n    x = tf.keras.layers.Dense(dim*2,activation='relu',name='top_conv')(x)\n    x = tf.keras.layers.Dropout(0.4)(x)\n    x = tf.keras.layers.Dense(len(char_to_num),name='out')(x)\n\n    #aux\n    x_aux = tf.keras.layers.Dense(dim*2,activation='relu',name='top_aux')(x_aux)\n    x_aux = tf.keras.layers.Dropout(0.4)(x_aux)\n    x_aux = tf.keras.layers.Dense(len(char_to_num),name='aux_out')(x_aux)    \n    \n    model = tf.keras.Model(inp, [x, x_aux])\n\n    loss = {\n        'out':CTCLoss,\n        'aux_out':CTCLoss\n    }\n    \n    # Adam Optimizer\n    optimizer = tfa.optimizers.RectifiedAdam(sma_threshold=4)\n    optimizer = tfa.optimizers.Lookahead(optimizer, sync_period=5)\n\n    model.compile(loss=loss, optimizer=optimizer)\n\n    return model\n```\n",
      "votes": 9
    },
    {
      "id": 2410713,
      "postDate": "2023-08-27T06:58:56.290Z",
      "content": "<p>Amazing  Keep going@sugupoko </p>",
      "rawMarkdown": "Amazing  Keep going@sugupoko ",
      "votes": 1
    },
    {
      "id": 2408364,
      "postDate": "2023-08-25T15:35:41.663Z",
      "content": "<p>Congratulations. Thanks for sharing the details of your solution with nice illustrations.</p>",
      "rawMarkdown": "Congratulations. Thanks for sharing the details of your solution with nice illustrations.",
      "votes": 1
    },
    {
      "id": 2413036,
      "postDate": "2023-08-28T16:34:05.037Z",
      "content": "<p>GG sir! nice one</p>",
      "rawMarkdown": "GG sir! nice one"
    }
  ],
  "comments": [
    {
      "id": 2410713,
      "author_name": "Priyanshu1235",
      "author_url": "",
      "post_date": "2023-08-27T06:58:56.290000",
      "content": "<p>Amazing  Keep going@sugupoko </p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 2408364,
      "author_name": "C R Suthikshn Kumar",
      "author_url": "",
      "post_date": "2023-08-25T15:35:41.663000",
      "content": "<p>Congratulations. Thanks for sharing the details of your solution with nice illustrations.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 2413036,
      "author_name": "Mystic Shadow",
      "author_url": "",
      "post_date": "2023-08-28T16:34:05.037000",
      "content": "<p>GG sir! nice one</p>",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "2407195": "# 95th Bronze solutions\n\nThanks to Kaggle for hosting this interesting competition!!!!\nThis competition was diffucult for us…\nThere were many differences from last competition which made it challenging. I enjoyed learning about transcription task.\n\n# Summary\nWe utilized the best public notebook with some modifications.\n- base notebook: https://www.kaggle.com/code/saidineshpola/aslfr-ctc-based-on-prev-comp-1st-place\n\n# What changes were made from the public notebook?\n* Normalization (+0.002 LB)\n\t* Adjusted all coordinates so that the center of numbers 11 and 12 is set to 0.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F6d424a3976cee8f769e3e90ba54a9ac2%2Finbox_2930242_fa394dbd96e33fb875aef6ed1f25c757_1.png?generation=1692922021894426&alt=media)\n* Added more features (+0.01 LB)\n\t* Motion, Shape Feature, \n\t\t* Shape is  distance of this point\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2930242%2F3f7fdc56a208576b7664408fd807e422%2Finbox_2930242_b739316822c577ef9b4be204325f569e_2.png?generation=1692922063719858&alt=media)\n\n* Feature Augmentation (+0.01 LB)\n\t* Framerate, randomDrop, random padding, random crop.\n* Changed Model (+0.005 LB)\n\t* dim : 384 => 192\n\t* conv trans Block num : 3=>10\n\t* Add aux Loss\n* Pretraining with supplementay data (+0.01 LB)\n* Training params\n\t* epoch 100\n\t* batchsize 256\n\t* learningrate 1e-2\n\n# Things I couldn't do\n* Error correction Network.\n\t* I read the following paper and tried to incorporate voice recognition technology, but I couldn't make it in time.\n\t* https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjAkrKRvvaAAxWBO3AKHbDkB4MQFnoECBMQAQ&url=https%3A%2F%2Farxiv.org%2Fabs%2F2111.01690&usg=AOvVaw3B--e8pJqXTaYolWYXIBOf&opi=89978449\n* Change to SOTA OCR model.\n\t* https://arxiv.org/pdf/2205.00159.pdf\n\n# Appendix: Model code\n```\ndef get_model(dim = 192):\n    inp = tf.keras.Input(INPUT_SHAPE)\n    \n    x = tf.keras.layers.Masking(mask_value=0.0)(inp)\n    x = tf.keras.layers.Dense(dim, use_bias=False,name='stem_conv')(x) + positional_encoding(INPUT_SHAPE[0], dim)\n    x = tf.keras.layers.BatchNormalization(momentum=0.95,name='stem_bn')(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x_aux = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x_aux)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n\n    x = Conv1DBlock(dim, 11, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  5, drop_rate=0.2)(x)\n    x = Conv1DBlock(dim,  3, drop_rate=0.2)(x)\n    x = TransformerBlock(dim, expand=2)(x)\n    \n    # main\n    x = tf.keras.layers.Dense(dim*2,activation='relu',name='top_conv')(x)\n    x = tf.keras.layers.Dropout(0.4)(x)\n    x = tf.keras.layers.Dense(len(char_to_num),name='out')(x)\n\n    #aux\n    x_aux = tf.keras.layers.Dense(dim*2,activation='relu',name='top_aux')(x_aux)\n    x_aux = tf.keras.layers.Dropout(0.4)(x_aux)\n    x_aux = tf.keras.layers.Dense(len(char_to_num),name='aux_out')(x_aux)    \n    \n    model = tf.keras.Model(inp, [x, x_aux])\n\n    loss = {\n        'out':CTCLoss,\n        'aux_out':CTCLoss\n    }\n    \n    # Adam Optimizer\n    optimizer = tfa.optimizers.RectifiedAdam(sma_threshold=4)\n    optimizer = tfa.optimizers.Lookahead(optimizer, sync_period=5)\n\n    model.compile(loss=loss, optimizer=optimizer)\n\n    return model\n```\n",
    "2410713": "Amazing  Keep going@sugupoko ",
    "2408364": "Congratulations. Thanks for sharing the details of your solution with nice illustrations.",
    "2413036": "GG sir! nice one"
  }
}