Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Read by thought-leaders and decision-makers around the world. Phone Number: +1-650-246-9381 Email: pub@towardsai.net
228 Park Avenue South New York, NY 10003 United States
Website: Publisher: https://towardsai.net/#publisher Diversity Policy: https://towardsai.net/about Ethics Policy: https://towardsai.net/about Masthead: https://towardsai.net/about
Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Founders: Roberto Iriondo, , Job Title: Co-founder and Advisor Works for: Towards AI, Inc. Follow Roberto: X, LinkedIn, GitHub, Google Scholar, Towards AI Profile, Medium, ML@CMU, FreeCodeCamp, Crunchbase, Bloomberg, Roberto Iriondo, Generative AI Lab, Generative AI Lab Denis Piffaretti, Job Title: Co-founder Works for: Towards AI, Inc. Louie Peters, Job Title: Co-founder Works for: Towards AI, Inc. Louis-François Bouchard, Job Title: Co-founder Works for: Towards AI, Inc. Cover:
Towards AI Cover
Logo:
Towards AI Logo
Areas Served: Worldwide Alternate Name: Towards AI, Inc. Alternate Name: Towards AI Co. Alternate Name: towards ai Alternate Name: towardsai Alternate Name: towards.ai Alternate Name: tai Alternate Name: toward ai Alternate Name: toward.ai Alternate Name: Towards AI, Inc. Alternate Name: towardsai.net Alternate Name: pub.towardsai.net
5 stars – based on 497 reviews

Frequently Used, Contextual References

TODO: Remember to copy unique IDs whenever it needs used. i.e., URL: 304b2e42315e

Resources

Take our 85+ lesson From Beginner to Advanced LLM Developer Certification: From choosing a project to deploying a working product this is the most comprehensive and practical LLM course out there!

Publication

AWS re:Invent 2020 Machine Learning Keynote Recap & Highlights
News   Newsletter

AWS re:Invent 2020 Machine Learning Keynote Recap & Highlights

Last Updated on July 24, 2023 by Editorial Team

Sharing Thoughts and Points to Ponder

Author(s): Juv Chan

Welcome to the first-ever Machine Learning Keynote at AWS re:Invent. It is a 2-hour virtual session delivered by Dr. Swami Sivasubramanian, VP of Amazon Machine Learning, on the latest developments, launches, and demos in AWS machine learning and AI, as well as customer insights and success stories. Let’s recap the key highlights in chronological order.

250+ New Features Released in 2020

It only takes slightly more than a single day on average for a new ML/AI feature release from AWS in 2020 based on working days! Even if it is based on calendar days, it still only takes less than 2 days on average to achieve this feat. The AWS ML/AI pace of innovation is really incredibly fast this year.

What do you think?

92% Cloud-based TensorFlow & 91% Cloud-based PyTorch runs on AWS

The information above is from the Nucleus Research U192 — Guidebook: Deep Learning on AWS — November 23, 2020. The percentage of cloud-based PyTorch runs on AWS should be 90% instead of 91%. On the other hand, the horizontal bar chart below from Kaggle’s State of Machine Learning and Data Science 2020 survey also shows that AWS is the most popular cloud platform among enterprise data scientists.

Enterprise Cloud Computing, Kaggle’s State of Machine Learning and Data Science 2020 survey

Habana Gaudi-based Amazon EC2 Instances

Habana Gaudi-based Amazon EC2 instances will be available in the first half of 2021. The Habana Gaudi AI processors are built specifically for ML training workloads, which can deliver up to 40% better price/performance than the current GPU-based Amazon EC2 instance.

Learn more from this press release and announcement blog.

AWS Trainium

AWS Trainium will be available in 2021. It is a new custom machine learning training chip designed and built by AWS to deliver the most cost-effective ML training in the cloud. I think it will be exciting to compare its price/performance with other AI training accelerator ASICs such as Habana Gaudi and Cloud TPU.

Faster Distributed Training on Amazon SageMaker

Amazon SageMaker distributed training is now generally available, which enables distributed training to complete on Amazon SageMaker for up to 40% faster at no additional cost. The two new SageMaker data parallelism and model parallelism distributed training libraries introduced are:

A convincing showcase is that AWS and NVIDIA have achieved the world’s fastest training times for Mask R-CNN and T5–3B with this feature.

Mask R-CNN (Region-based Convolutional Neural Network) is a state-of-the-art (SOTA) deep neural network architecture for instance segmentation in computer vision object detection.

T5–3B (Text-To-Text Transfer Transformer — 3 Billion parameters) is a SOTA Natural Language Processing (NLP) model from Google, pretrained on the Colossal Clean Crawled Corpus (C4) dataset. It achieves near-human performance on multiple NLP tasks on the SuperGLUE benchmark.

Learn more from this announcement blog, and the Get Started with Distributed Training guide.

Amazon SageMaker Data Wrangler

Amazon SageMaker Data Wrangler is now generally available. It enables faster and easier data preparation for machine learning via a visual interface.

Learn more from this announcement blog, and the Get Started with Data Wrangler guide.

Amazon SageMaker Feature Store

Amazon SageMaker Feature Store is now generally available. It serves as a fully managed repository to store, discover, and share machine learning (ML) features. This enables the re-use of machine learning features that save time and cost for machine learning workflows.

Learn more from this announcement blog, and the Get Started with Feature Store guide.

Amazon SageMaker Clarify

Amazon SageMaker Clarify is now generally available. It enables bias detection in both data and model as well as model explainability on understanding the model behaviour. This feature is useful in improving model fairness and transparency for building safer and more responsible AI solutions.

Learn more from this announcement blog and the Model Fairness and Explainability guide.

Deep Profiling for Amazon SageMaker Debugger

Deep Profiling for Amazon SageMaker Debugger is now generally available. It enables deep profiling of machine learning training jobs. This feature is useful for identifying training bottlenecks and system resource utilization.

Learn more from this announcement blog and the Identifying Bottlenecks, Improve Resource Utilization and Reduce ML Training Costs with Deep Profiling feature in Amazon SageMaker Debugger blog.

Amazon SageMaker Pipelines

Amazon SageMaker Pipelines is now generally available. It is the first purpose-built continuous integration and continuous delivery (CI/CD) service for machine learning. This feature enables automated end-to-end MLOps workflows with built-in or custom MLOps templates. Below is a demo of the SageMaker Pipelines MLOps workflow.

Learn more from this announcement blog and these SageMaker Pipelines get started guide.

Amazon SageMaker Edge Manager

Amazon SageMaker Edge Manager is now generally available. It simplifies the management of ML models across fleets of edge devices such as smart cameras, robots, personal computers, and mobile devices.

Learn more from this announcement blog, and this Edge Manager get started guide.

Amazon Redshift ML

Amazon Redshift ML is now available in preview. It enables data analysts and database developers to leverage SQL to create and train ML models from data in Amazon Redshift and use these models to make in-database predictions. Amazon Redshift is the most popular, fully managed, and petabyte-scale data warehouse.

Learn more from this announcement blog, and this Redshift ML get started guide.

Amazon Neptune ML

Amazon Neptune ML is now generally available. It uses Graph Neural Networks (GNNs) to make easy, fast, and more accurate predictions on graphs. Amazon Neptune is a fast, reliable, fully-managed graph database service that makes it easy to build and run applications that work with highly connected datasets.

Learn more from this announcement blog and this Using Neptune ML on graphs guide.

Amazon QuickSight Q

Amazon QuickSight Q is now available in preview. It is a natural language search service for business intelligence that allows business users to ask data questions in plain language and get answers instantly. Amazon QuickSight is a scalable, serverless, embeddable, machine learning-powered business intelligence (BI) service built for the cloud. Below are demos of the results asked by the user in plain English shown in the QuickSight dashboards.

Learn more from this announcement blog.

Amazon Lookout for Metrics

Amazon Lookout for Metrics is now available in preview. It is a service that automatically detects and diagnoses anomalies from metrics such as a dip in product sales or a sudden increase in qualified sales leads. It also provides root cause analysis that enables businesses to take actions faster to deal with the anomalies.

Learn more from this announcement blog.

Amazon Monitron

Amazon Monitron is now generally available. It is an end-to-end predictive maintenance service that monitors industrial machinery equipment and automatically detects potential failures to minimize unplanned downtime. The Amazon Monitron Starter Kit is available now.

Learn more from this announcement blog.

Amazon Lookout for Equipment

Amazon Lookout for Equipment is now available in preview. It is an anomaly detection service that allows customers with existing equipment sensors to use AWS ML models to detect abnormal equipment behaviour and enable predictive maintenance.

Learn more from this announcement blog.

Amazon Lookout for Vision

Amazon Lookout for Vision is now available in preview. It is is a service that spots visual defects and anomalies in products using computer vision (CV) to automate quality inspection for manufacturing.

Learn more from this announcement blog and the Lookout for Vision developer guide.

AWS Panorama Appliance

AWS Panorama Appliance is now available in preview as part of AWS Panorama. It is a hardware device that adds computer vision (CV) capability to existing internet protocol (IP) cameras that weren’t built to accommodate CV. It turns existing IP cameras into smart cameras that can run CV models on multiple concurrent video streams with low latency and high data privacy.

Learn more from this announcement blog.

AWS Panorama SDK

AWS Panorama SDK is now available in preview as part of AWS Panorama. It is a software development kit (SDK) that enables third-party manufacturers to build new cameras that run CV models at the edge for tasks like object detection, facial recognition or activity recognition, and more.

Learn more from this announcement blog.

Amazon HealthLake

Amazon HealthLake is now available in preview. It is a fully managed HIPAA-eligible service that enables allows healthcare and life sciences customers to aggregate their health data from different silos and formats into a centralized AWS data lake at a petabyte-scale.

Learn more from this announcement blog, and the HealthLake get started guide.

Machine Learning Education

Here is a list of AWS public resources, Massive Open Online Courses (MOOC) with third parties such as Coursera, edX, Udacity, as well as educational devices for anyone who is interested in machine learning education.

  1. AWS Machine Learning University
  2. AWS Machine Learning
  3. AWS Machine Learning Training Library
  4. AWS Ramp-Up Guide: Machine Learning
  5. AWS Educate: Machine Learning Scientist Career Pathway
  6. Udacity-AWS: Machine Learning Engineer Nanodegree
  7. Coursera-AWS: Getting Started with AWS Machine Learning
  8. edX-AWS: Amazon SageMaker: Simplifying Machine Learning Application Development
  9. AWS DeepLens
  10. AWS DeepRacer
  11. AWS DeepComposer

The Five Tenets

  1. Provide firm foundations
  2. Create the shortest path to success
  3. Expand machine learning to more builders
  4. Solve real business problems, end-to-end
  5. Learn continuously

Some of these tenets are aligned with one or more of Amazon’s Leadership Principles, such as Learn and Be Curious (Tenet 5).

Final Thoughts

We can see that a lot of AWS ML/AI new innovations this year are centered on AWS SageMaker and industrial machine learning services. There is no doubt why AWS SageMaker becomes one of the fastest-growing services ever in AWS history. If AWS continues to keep or accelerate the pace of innovations in ML/AI in the future, I am positive that AWS will continue to maintain its lead and edge in the Gartner Magic Quadrant for Cloud AI Developer Services in the future.

Gartner’s Magic Quadrant for Cloud AI Developer Services (Feb. 2020)

Feedback ↓

Sign Up for the Course
`; } else { console.error('Element with id="subscribe" not found within the page with class "home".'); } } }); // Remove duplicate text from articles /* Backup: 09/11/24 function removeDuplicateText() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, strong'); // Select the desired elements const seenTexts = new Set(); // A set to keep track of seen texts const tagCounters = {}; // Object to track instances of each tag elements.forEach(el => { const tagName = el.tagName.toLowerCase(); // Get the tag name (e.g., 'h1', 'h2', etc.) // Initialize a counter for each tag if not already done if (!tagCounters[tagName]) { tagCounters[tagName] = 0; } // Only process the first 10 elements of each tag type if (tagCounters[tagName] >= 2) { return; // Skip if the number of elements exceeds 10 } const text = el.textContent.trim(); // Get the text content const words = text.split(/\s+/); // Split the text into words if (words.length >= 4) { // Ensure at least 4 words const significantPart = words.slice(0, 5).join(' '); // Get first 5 words for matching // Check if the text (not the tag) has been seen before if (seenTexts.has(significantPart)) { // console.log('Duplicate found, removing:', el); // Log duplicate el.remove(); // Remove duplicate element } else { seenTexts.add(significantPart); // Add the text to the set } } tagCounters[tagName]++; // Increment the counter for this tag }); } removeDuplicateText(); */ // Remove duplicate text from articles function removeDuplicateText() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, strong'); // Select the desired elements const seenTexts = new Set(); // A set to keep track of seen texts const tagCounters = {}; // Object to track instances of each tag // List of classes to be excluded const excludedClasses = ['medium-author', 'post-widget-title']; elements.forEach(el => { // Skip elements with any of the excluded classes if (excludedClasses.some(cls => el.classList.contains(cls))) { return; // Skip this element if it has any of the excluded classes } const tagName = el.tagName.toLowerCase(); // Get the tag name (e.g., 'h1', 'h2', etc.) // Initialize a counter for each tag if not already done if (!tagCounters[tagName]) { tagCounters[tagName] = 0; } // Only process the first 10 elements of each tag type if (tagCounters[tagName] >= 10) { return; // Skip if the number of elements exceeds 10 } const text = el.textContent.trim(); // Get the text content const words = text.split(/\s+/); // Split the text into words if (words.length >= 4) { // Ensure at least 4 words const significantPart = words.slice(0, 5).join(' '); // Get first 5 words for matching // Check if the text (not the tag) has been seen before if (seenTexts.has(significantPart)) { // console.log('Duplicate found, removing:', el); // Log duplicate el.remove(); // Remove duplicate element } else { seenTexts.add(significantPart); // Add the text to the set } } tagCounters[tagName]++; // Increment the counter for this tag }); } removeDuplicateText(); //Remove unnecessary text in blog excerpts document.querySelectorAll('.blog p').forEach(function(paragraph) { // Replace the unwanted text pattern for each paragraph paragraph.innerHTML = paragraph.innerHTML .replace(/Author\(s\): [\w\s]+ Originally published on Towards AI\.?/g, '') // Removes 'Author(s): XYZ Originally published on Towards AI' .replace(/This member-only story is on us\. Upgrade to access all of Medium\./g, ''); // Removes 'This member-only story...' }); //Load ionic icons and cache them if ('localStorage' in window && window['localStorage'] !== null) { const cssLink = 'https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css'; const storedCss = localStorage.getItem('ionicons'); if (storedCss) { loadCSS(storedCss); } else { fetch(cssLink).then(response => response.text()).then(css => { localStorage.setItem('ionicons', css); loadCSS(css); }); } } function loadCSS(css) { const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); } //Remove elements from imported content automatically function removeStrongFromHeadings() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, h6, span'); elements.forEach(el => { const strongTags = el.querySelectorAll('strong'); strongTags.forEach(strongTag => { while (strongTag.firstChild) { strongTag.parentNode.insertBefore(strongTag.firstChild, strongTag); } strongTag.remove(); }); }); } removeStrongFromHeadings(); "use strict"; window.onload = () => { /* //This is an object for each category of subjects and in that there are kewords and link to the keywods let keywordsAndLinks = { //you can add more categories and define their keywords and add a link ds: { keywords: [ //you can add more keywords here they are detected and replaced with achor tag automatically 'data science', 'Data science', 'Data Science', 'data Science', 'DATA SCIENCE', ], //we will replace the linktext with the keyword later on in the code //you can easily change links for each category here //(include class="ml-link" and linktext) link: 'linktext', }, ml: { keywords: [ //Add more keywords 'machine learning', 'Machine learning', 'Machine Learning', 'machine Learning', 'MACHINE LEARNING', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, ai: { keywords: [ 'artificial intelligence', 'Artificial intelligence', 'Artificial Intelligence', 'artificial Intelligence', 'ARTIFICIAL INTELLIGENCE', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, nl: { keywords: [ 'NLP', 'nlp', 'natural language processing', 'Natural Language Processing', 'NATURAL LANGUAGE PROCESSING', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, des: { keywords: [ 'data engineering services', 'Data Engineering Services', 'DATA ENGINEERING SERVICES', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, td: { keywords: [ 'training data', 'Training Data', 'training Data', 'TRAINING DATA', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, ias: { keywords: [ 'image annotation services', 'Image annotation services', 'image Annotation services', 'image annotation Services', 'Image Annotation Services', 'IMAGE ANNOTATION SERVICES', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, l: { keywords: [ 'labeling', 'labelling', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, pbp: { keywords: [ 'previous blog posts', 'previous blog post', 'latest', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, mlc: { keywords: [ 'machine learning course', 'machine learning class', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, }; //Articles to skip let articleIdsToSkip = ['post-2651', 'post-3414', 'post-3540']; //keyword with its related achortag is recieved here along with article id function searchAndReplace(keyword, anchorTag, articleId) { //selects the h3 h4 and p tags that are inside of the article let content = document.querySelector(`#${articleId} .entry-content`); //replaces the "linktext" in achor tag with the keyword that will be searched and replaced let newLink = anchorTag.replace('linktext', keyword); //regular expression to search keyword var re = new RegExp('(' + keyword + ')', 'g'); //this replaces the keywords in h3 h4 and p tags content with achor tag content.innerHTML = content.innerHTML.replace(re, newLink); } function articleFilter(keyword, anchorTag) { //gets all the articles var articles = document.querySelectorAll('article'); //if its zero or less then there are no articles if (articles.length > 0) { for (let x = 0; x < articles.length; x++) { //articles to skip is an array in which there are ids of articles which should not get effected //if the current article's id is also in that array then do not call search and replace with its data if (!articleIdsToSkip.includes(articles[x].id)) { //search and replace is called on articles which should get effected searchAndReplace(keyword, anchorTag, articles[x].id, key); } else { console.log( `Cannot replace the keywords in article with id ${articles[x].id}` ); } } } else { console.log('No articles found.'); } } let key; //not part of script, added for (key in keywordsAndLinks) { //key is the object in keywords and links object i.e ds, ml, ai for (let i = 0; i < keywordsAndLinks[key].keywords.length; i++) { //keywordsAndLinks[key].keywords is the array of keywords for key (ds, ml, ai) //keywordsAndLinks[key].keywords[i] is the keyword and keywordsAndLinks[key].link is the link //keyword and link is sent to searchreplace where it is then replaced using regular expression and replace function articleFilter( keywordsAndLinks[key].keywords[i], keywordsAndLinks[key].link ); } } function cleanLinks() { // (making smal functions is for DRY) this function gets the links and only keeps the first 2 and from the rest removes the anchor tag and replaces it with its text function removeLinks(links) { if (links.length > 1) { for (let i = 2; i < links.length; i++) { links[i].outerHTML = links[i].textContent; } } } //arrays which will contain all the achor tags found with the class (ds-link, ml-link, ailink) in each article inserted using search and replace let dslinks; let mllinks; let ailinks; let nllinks; let deslinks; let tdlinks; let iaslinks; let llinks; let pbplinks; let mlclinks; const content = document.querySelectorAll('article'); //all articles content.forEach((c) => { //to skip the articles with specific ids if (!articleIdsToSkip.includes(c.id)) { //getting all the anchor tags in each article one by one dslinks = document.querySelectorAll(`#${c.id} .entry-content a.ds-link`); mllinks = document.querySelectorAll(`#${c.id} .entry-content a.ml-link`); ailinks = document.querySelectorAll(`#${c.id} .entry-content a.ai-link`); nllinks = document.querySelectorAll(`#${c.id} .entry-content a.ntrl-link`); deslinks = document.querySelectorAll(`#${c.id} .entry-content a.des-link`); tdlinks = document.querySelectorAll(`#${c.id} .entry-content a.td-link`); iaslinks = document.querySelectorAll(`#${c.id} .entry-content a.ias-link`); mlclinks = document.querySelectorAll(`#${c.id} .entry-content a.mlc-link`); llinks = document.querySelectorAll(`#${c.id} .entry-content a.l-link`); pbplinks = document.querySelectorAll(`#${c.id} .entry-content a.pbp-link`); //sending the anchor tags list of each article one by one to remove extra anchor tags removeLinks(dslinks); removeLinks(mllinks); removeLinks(ailinks); removeLinks(nllinks); removeLinks(deslinks); removeLinks(tdlinks); removeLinks(iaslinks); removeLinks(mlclinks); removeLinks(llinks); removeLinks(pbplinks); } }); } //To remove extra achor tags of each category (ds, ml, ai) and only have 2 of each category per article cleanLinks(); */ //Recommended Articles var ctaLinks = [ /* ' ' + '

Subscribe to our AI newsletter!

' + */ '

Take our 85+ lesson From Beginner to Advanced LLM Developer Certification: From choosing a project to deploying a working product this is the most comprehensive and practical LLM course out there!

'+ '

Towards AI has published Building LLMs for Production—our 470+ page guide to mastering LLMs with practical projects and expert insights!

' + '
' + '' + '' + '

Note: Content contains the views of the contributing authors and not Towards AI.
Disclosure: This website may contain sponsored content and affiliate links.

' + 'Discover Your Dream AI Career at Towards AI Jobs' + '

Towards AI has built a jobs board tailored specifically to Machine Learning and Data Science Jobs and Skills. Our software searches for live AI jobs each hour, labels and categorises them and makes them easily searchable. Explore over 10,000 live jobs today with Towards AI Jobs!

' + '
' + '

🔥 Recommended Articles 🔥

' + 'Why Become an LLM Developer? Launching Towards AI’s New One-Stop Conversion Course'+ 'Testing Launchpad.sh: A Container-based GPU Cloud for Inference and Fine-tuning'+ 'The Top 13 AI-Powered CRM Platforms
' + 'Top 11 AI Call Center Software for 2024
' + 'Learn Prompting 101—Prompt Engineering Course
' + 'Explore Leading Cloud Providers for GPU-Powered LLM Training
' + 'Best AI Communities for Artificial Intelligence Enthusiasts
' + 'Best Workstations for Deep Learning
' + 'Best Laptops for Deep Learning
' + 'Best Machine Learning Books
' + 'Machine Learning Algorithms
' + 'Neural Networks Tutorial
' + 'Best Public Datasets for Machine Learning
' + 'Neural Network Types
' + 'NLP Tutorial
' + 'Best Data Science Books
' + 'Monte Carlo Simulation Tutorial
' + 'Recommender System Tutorial
' + 'Linear Algebra for Deep Learning Tutorial
' + 'Google Colab Introduction
' + 'Decision Trees in Machine Learning
' + 'Principal Component Analysis (PCA) Tutorial
' + 'Linear Regression from Zero to Hero
'+ '

', /* + '

Join thousands of data leaders on the AI newsletter. It’s free, we don’t spam, and we never share your email address. Keep up to date with the latest work in AI. From research to projects and ideas. If you are building an AI startup, an AI-related product, or a service, we invite you to consider becoming a sponsor.

',*/ ]; var replaceText = { '': '', '': '', '
': '
' + ctaLinks + '
', }; Object.keys(replaceText).forEach((txtorig) => { //txtorig is the key in replacetext object const txtnew = replaceText[txtorig]; //txtnew is the value of the key in replacetext object let entryFooter = document.querySelector('article .entry-footer'); if (document.querySelectorAll('.single-post').length > 0) { //console.log('Article found.'); const text = entryFooter.innerHTML; entryFooter.innerHTML = text.replace(txtorig, txtnew); } else { // console.log('Article not found.'); //removing comment 09/04/24 } }); var css = document.createElement('style'); css.type = 'text/css'; css.innerHTML = '.post-tags { display:none !important } .article-cta a { font-size: 18px; }'; document.body.appendChild(css); //Extra //This function adds some accessibility needs to the site. function addAlly() { // In this function JQuery is replaced with vanilla javascript functions const imgCont = document.querySelector('.uw-imgcont'); imgCont.setAttribute('aria-label', 'AI news, latest developments'); imgCont.title = 'AI news, latest developments'; imgCont.rel = 'noopener'; document.querySelector('.page-mobile-menu-logo a').title = 'Towards AI Home'; document.querySelector('a.social-link').rel = 'noopener'; document.querySelector('a.uw-text').rel = 'noopener'; document.querySelector('a.uw-w-branding').rel = 'noopener'; document.querySelector('.blog h2.heading').innerHTML = 'Publication'; const popupSearch = document.querySelector$('a.btn-open-popup-search'); popupSearch.setAttribute('role', 'button'); popupSearch.title = 'Search'; const searchClose = document.querySelector('a.popup-search-close'); searchClose.setAttribute('role', 'button'); searchClose.title = 'Close search page'; // document // .querySelector('a.btn-open-popup-search') // .setAttribute( // 'href', // 'https://medium.com/towards-artificial-intelligence/search' // ); } // Add external attributes to 302 sticky and editorial links function extLink() { // Sticky 302 links, this fuction opens the link we send to Medium on a new tab and adds a "noopener" rel to them var stickyLinks = document.querySelectorAll('.grid-item.sticky a'); for (var i = 0; i < stickyLinks.length; i++) { /* stickyLinks[i].setAttribute('target', '_blank'); stickyLinks[i].setAttribute('rel', 'noopener'); */ } // Editorial 302 links, same here var editLinks = document.querySelectorAll( '.grid-item.category-editorial a' ); for (var i = 0; i < editLinks.length; i++) { editLinks[i].setAttribute('target', '_blank'); editLinks[i].setAttribute('rel', 'noopener'); } } // Add current year to copyright notices document.getElementById( 'js-current-year' ).textContent = new Date().getFullYear(); // Call functions after page load extLink(); //addAlly(); setTimeout(function() { //addAlly(); //ideally we should only need to run it once ↑ }, 5000); }; function closeCookieDialog (){ document.getElementById("cookie-consent").style.display = "none"; return false; } setTimeout ( function () { closeCookieDialog(); }, 15000); console.log(`%c 🚀🚀🚀 ███ █████ ███████ █████████ ███████████ █████████████ ███████████████ ███████ ███████ ███████ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ Towards AI is looking for contributors! │ │ Join us in creating awesome AI content. │ │ Let's build the future of AI together → │ │ https://towardsai.net/contribute │ │ │ └───────────────────────────────────────────────────────────────────┘ `, `background: ; color: #00adff; font-size: large`); //Remove latest category across site document.querySelectorAll('a[rel="category tag"]').forEach(function(el) { if (el.textContent.trim() === 'Latest') { // Remove the two consecutive spaces (  ) if (el.nextSibling && el.nextSibling.nodeValue.includes('\u00A0\u00A0')) { el.nextSibling.nodeValue = ''; // Remove the spaces } el.style.display = 'none'; // Hide the element } }); // Add cross-domain measurement, anonymize IPs 'use strict'; //var ga = gtag; ga('config', 'G-9D3HKKFV1Q', 'auto', { /*'allowLinker': true,*/ 'anonymize_ip': true/*, 'linker': { 'domains': [ 'medium.com/towards-artificial-intelligence', 'datasets.towardsai.net', 'rss.towardsai.net', 'feed.towardsai.net', 'contribute.towardsai.net', 'members.towardsai.net', 'pub.towardsai.net', 'news.towardsai.net' ] } */ }); ga('send', 'pageview'); -->