{"id":3518,"date":"2025-08-15T11:12:58","date_gmt":"2025-08-15T09:12:58","guid":{"rendered":"https:\/\/neuraldesigner.com\/learning\/qcm-alcohol-sensor\/"},"modified":"2026-08-25T14:03:34","modified_gmt":"2026-08-25T12:03:34","slug":"qcm-alcohol-sensor","status":"publish","type":"learning","link":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/","title":{"rendered":"Develop an e-nose to detect alcohols using machine learning"},"content":{"rendered":"\n<style>\n.ndb{width:100vw;margin-left:calc(50% - 50vw);padding:22px 24px 14px;background:#eee;color:#1b2635;font-family:\"Outfit\",\"Roboto\",Arial,sans-serif}.ndb *{box-sizing:border-box}.ndb-wrap{width:min(100%,1200px);margin:0 auto}.ndb a{text-decoration:none;color:#2d799f;font-weight:600}\n.ndb-executive{margin:0 0 34px;padding:32px;border-radius:20px;background:linear-gradient(135deg,#12354b,#245e80);color:#fff;box-shadow:0 16px 36px rgba(0,18,51,.18)}.ndb-executive h2{margin:0 0 12px;padding:0;border:0;color:#fff;font-size:30px;line-height:1.2}.ndb-executive p{margin:0;color:#eaf5fb;font-size:18px;line-height:1.55}.ndb-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:22px}.ndb-kpi{padding:18px;border:1px solid rgba(255,255,255,.18);border-radius:14px;background:rgba(255,255,255,.1)}.ndb-kpi strong{display:block;color:#fff;font-size:25px;line-height:1.1}.ndb-kpi span{display:block;margin-top:6px;color:#d9edf7;font-size:13px}\n.ndb-actions,.ndb-audience,.ndb-downloads{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin:22px 0}.ndb-actions a,.ndb-downloads a{display:inline-flex;align-items:center;justify-content:center;padding:12px 20px;border-radius:24px;background:#245e80;color:#fff!important;font-weight:700}.ndb-executive .ndb-actions a{background:#fff;color:#12354b!important}.ndb-executive .ndb-actions a:last-child{background:transparent;color:#fff!important;border:1px solid rgba(255,255,255,.55)}\n.ndb-lead{margin:0 0 28px;color:#3a4a5a;font-size:18px;line-height:1.6}.ndb-toc{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:0 0 42px;padding:0;list-style:none}.ndb-toc a,.ndb-audience span{display:block;padding:9px 14px;border-radius:20px;background:#e9f2f8;color:#12354b;font-size:14px;font-weight:600}\n.ndb-card{margin:0 0 54px;scroll-margin-top:90px}.ndb-card h2{position:relative;margin:0 0 20px;padding-bottom:12px;border-bottom:1px solid #dbe5ec;color:#001233;font-size:24px}.ndb-card h2:after{content:\"\";position:absolute;bottom:-1px;left:0;width:62px;height:3px;border-radius:2px;background:#56a1c8}.ndb-card h3{margin:28px 0 12px;color:#12354b;font-size:20px}.ndb-card p{margin:0 0 14px;color:#33424f;font-size:16.5px;line-height:1.62}.ndb-card li{margin:5px 0;color:#33424f;font-size:16px;line-height:1.5}.ndb-card code{padding:2px 5px;border-radius:4px;background:#e8eef2;color:#12354b}\n.ndb-value-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:22px 0}.ndb-value{padding:20px;border:1px solid #dce8ef;border-radius:14px;background:#f8fbfd}.ndb-value strong{display:block;margin-bottom:6px;color:#12354b;font-size:17px}.ndb-value span{color:#4a5d6b;line-height:1.45}\n.ndb-note{margin:20px 0;padding:18px 20px;border-left:4px solid #56a1c8;border-radius:0 12px 12px 0;background:#f6fafc;color:#33424f;line-height:1.55}.ndb-note--warning{border-left-color:#e39b36;background:#fff9ef}\n.ndb-card img{display:block;width:auto;max-width:min(680px,100%);height:auto;margin:24px auto;border-radius:12px;box-shadow:0 12px 28px rgba(0,18,51,.12)}.ndb-card img.ndb-architecture{width:min(820px,100%);max-width:100%}.ndb-figure-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin:24px 0}.ndb-figure-grid figure{margin:0;padding:16px;border:1px solid #dce8ef;border-radius:15px;background:#f8fbfd}.ndb-figure-grid img{width:100%;max-width:100%;margin:0 auto 12px;box-shadow:none}.ndb-figure-grid figcaption{color:#405361;font-size:14px;line-height:1.45}\n.ndb-card table{width:auto;max-width:100%;margin:24px auto;border-collapse:separate;border-spacing:0;overflow:hidden;border-radius:12px;background:#fff;box-shadow:0 10px 24px rgba(0,18,51,.08)}.ndb-card th,.ndb-card td{padding:11px 16px;border-bottom:1px solid #e2e9ee;text-align:left}.ndb-card thead th{background:#12354b!important;color:#fff!important}.ndb-card tbody th{background:#eaf2f6!important;color:#12354b!important;text-align:left}.ndb-card tbody tr:nth-child(even) th{background:#f4f8fa!important}.ndb-card tbody td{color:#33424f!important}.ndb-card td{color:#33424f}.ndb-card tbody tr:last-child td{border-bottom:0}\n.ndb-flow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:24px 0}.ndb-flow div{position:relative;padding:18px 16px;border-radius:13px;background:#12354b;color:#fff;text-align:center;font-weight:600}.ndb-flow div:not(:last-child):after{content:\"\u2192\";position:absolute;right:-17px;top:50%;z-index:2;transform:translateY(-50%);color:#56a1c8;font-size:22px}\n.ndb-calculator{margin:26px 0;padding:26px;border:1px solid #cfe0ea;border-radius:18px;background:#f8fbfd;box-shadow:0 12px 28px rgba(0,18,51,.08)}.ndb-calculator h3{margin-top:0}.ndb-calculator-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.ndb-field label{display:block;margin-bottom:6px;color:#33424f;font-size:13px;font-weight:700}.ndb-field input{width:100%;padding:10px 11px;border:1px solid #bdcfda;border-radius:8px;background:#fff;color:#1b2635;font:inherit}.ndb-field small{display:block;margin-top:4px;color:#71818d;font-size:11px}.ndb-calc-actions{display:flex;justify-content:center;gap:10px;margin:18px 0}.ndb-calc-actions button{padding:11px 18px;border:0;border-radius:22px;background:#245e80;color:#fff;font:inherit;font-weight:700;cursor:pointer}.ndb-calc-actions button[type=button]{background:#e4edf2;color:#12354b}.ndb-output{max-width:360px;margin:0 auto;padding:20px;border:1px solid #d8e4eb;border-radius:12px;background:#fff;text-align:center}.ndb-output span{display:block;color:#5e707d;font-size:13px}.ndb-output strong{display:block;margin-top:5px;color:#12354b;font-size:28px}.ndb-calc-status{text-align:center;color:#60727f!important;font-size:13px!important}\n.ndb-card details{margin:22px 0;padding:16px 18px;border:1px solid #dce8ef;border-radius:12px;background:#f8fbfd}.ndb-card summary{cursor:pointer;color:#12354b;font-weight:700}.ndb-card pre{overflow-x:auto;margin:15px 0 0;padding:18px;border-radius:10px;background:#edf2f5;color:#1b2635;font:12px\/1.5 Consolas,monospace;white-space:pre}\n@media(max-width:900px){.ndb-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.ndb-value-grid{grid-template-columns:1fr}.ndb-flow{grid-template-columns:1fr 1fr}.ndb-flow div:after{display:none}}\n@media(max-width:680px){.ndb{padding:12px 14px}.ndb-executive{padding:24px 20px}.ndb-executive h2{font-size:24px}.ndb-kpis,.ndb-figure-grid,.ndb-calculator-grid,.ndb-flow{grid-template-columns:1fr}.ndb-calculator{padding:20px 16px}.ndb-card table{font-size:13px}.ndb-card th,.ndb-card td{padding:9px 8px}}\n<\/style>\n\n<style>\n.ndb-architecture--wide{width:min(980px,100%)!important}\n.ndb-case{margin:24px 0;padding:24px;border:1px solid #cfe0ea;border-radius:16px;background:#f8fbfd}.ndb-case h3{margin-top:0}\n.ndb-card .ndb-kpi{border:1px solid #dce8ef;background:#f8fbfd}.ndb-card .ndb-kpi strong{color:#12354b}.ndb-card .ndb-kpi span{color:#5e707d}\n.ndb-table-scroll{max-width:100%;overflow-x:auto}\n.ndb-confusion th,.ndb-confusion td{text-align:center;white-space:nowrap}.ndb-confusion tbody td:first-child{background:#12354b;color:#fff;font-weight:700}.ndb-confusion td.ndb-hit{background:#dff3e8;color:#1e6a47;font-weight:800}\n.ndb-probability-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-top:18px}.ndb-probability{min-height:116px;padding:17px;border:1px solid #d8e4eb;border-radius:12px;background:#fff}.ndb-probability span{display:block;color:#5e707d;font-size:13px;line-height:1.35}.ndb-probability strong{display:block;margin:7px 0;color:#12354b;font-size:22px}.ndb-probability em{color:#60727f;font-size:12px;font-style:normal;font-weight:700}\n.ndb-sample-picker{max-width:430px;margin:18px auto}.ndb-sample-picker label{display:block;margin-bottom:6px;color:#33424f;font-size:13px;font-weight:700}.ndb-sample-picker select{width:100%;padding:10px 11px;border:1px solid #bdcfda;border-radius:8px;background:#fff;color:#1b2635;font:inherit}\n@media(max-width:980px){.ndb-probability-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}\n@media(max-width:560px){.ndb-probability-grid{grid-template-columns:1fr}}\n<\/style>\n\n<div class=\"ndb\"><div class=\"ndb-wrap\">\n<section class=\"ndb-executive\"><h2>Identify five alcohol vapours from a compact QCM sensor signature<\/h2>\n<p>This electronic-nose example classifies a sample as 1-isobutanol, 1-octanol, 1-propanol, 2-butanol or 2-propanol from five frequency-shift measurements. It shows how a compact softmax model can turn a quartz-crystal microbalance response into an interpretable laboratory decision.<\/p>\n<div class=\"ndb-kpis\"><div class=\"ndb-kpi\"><strong>25<\/strong><span>labelled QCM samples<\/span><\/div><div class=\"ndb-kpi\"><strong>5<\/strong><span>frequency-shift inputs<\/span><\/div><div class=\"ndb-kpi\"><strong>5<\/strong><span>known alcohol classes<\/span><\/div><div class=\"ndb-kpi\"><strong>10 \/ 10<\/strong><span>testing samples classified correctly<\/span><\/div><\/div>\n<div class=\"ndb-actions\"><a href=\"#7-model-deployment\">Try the classifier<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/QCMalcoholsensor.csv\">Download QCMalcoholsensor.csv<\/a><\/div><\/section>\n<div class=\"ndb-lead\"><p>Electronic noses can support rapid screening when conventional analytical methods are too slow or costly for every measurement. In this controlled benchmark, the model compares the response pattern across five gas-mixture levels and selects one of five known alcohols. The result is useful as a compact pattern-recognition demonstration, but it is not evidence of field performance on unknown vapours or changing environmental conditions.<\/p><\/div>\n<ul class=\"ndb-toc\"><li><a href=\"#1-industrial-challenge\">Industrial challenge<\/a><\/li><li><a href=\"#2-data-set\">Data set<\/a><\/li><li><a href=\"#3-model\">Model<\/a><\/li><li><a href=\"#4-training\">Training<\/a><\/li><li><a href=\"#5-selection\">Validation design<\/a><\/li><li><a href=\"#6-testing\">Testing<\/a><\/li><li><a href=\"#7-model-deployment\">Deployment<\/a><\/li><li><a href=\"#8-limitations\">Limitations<\/a><\/li><li><a href=\"#references\">References<\/a><\/li><\/ul>\n\n<section id=\"1-industrial-challenge\" class=\"ndb-card\"><h2>1. Industrial challenge<\/h2>\n<p>This is a multiclass <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-networks-applications\/#Classification\">classification<\/a> problem. Five QCM frequency shifts describe one sample, and the network returns a mutually exclusive probability distribution over five alcohol identities.<\/p>\n<div class=\"ndb-value-grid\"><div class=\"ndb-value\"><strong>Screen known vapours<\/strong><span>Convert a multivariate sensor response into a repeatable identity suggestion for controlled samples.<\/span><\/div><div class=\"ndb-value\"><strong>Compare sensor signatures<\/strong><span>Quantify how the response changes across five specified air-to-gas mixture ratios.<\/span><\/div><div class=\"ndb-value\"><strong>Prototype an e-nose workflow<\/strong><span>Connect measurement checks, model inference, confidence review and confirmatory analysis.<\/span><\/div><\/div>\n<p>Potential users include sensor R&amp;D teams, analytical laboratories, chemical-process engineers, quality-control groups and industrial monitoring specialists.<\/p>\n<div class=\"ndb-audience\"><span>Sensor R&amp;D<\/span><span>Analytical laboratories<\/span><span>Chemical processing<\/span><span>Quality control<\/span><span>Industrial monitoring<\/span><\/div>\n<div class=\"ndb-note\"><strong>Model role.<\/strong> This is a closed-set alcohol-identity classifier for a controlled QCM experiment. It does not detect an arbitrary unknown substance, quantify concentration or replace a certified gas-monitoring system.<\/div><\/section>\n\n<section id=\"2-data-set\" class=\"ndb-card\"><h2>2. Data set<\/h2>\n<p>The source <a href=\"https:\/\/archive.ics.uci.edu\/dataset\/496\/alcohol%2Bqcm%2Bsensor%2Bdataset\">Alcohol QCM Sensor Dataset<\/a> contains five files for five QCM sensor configurations. This example uses the <strong>QCM12<\/strong> subset and retains one frequency-shift column at each of five mixture ratios. The updated semicolon-delimited CSV contains 25 observations, five numerical inputs and the categorical target <code>class<\/code>, with no missing values.<\/p>\n<div class=\"ndb-downloads\"><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/QCMalcoholsensor.csv\">Download dataset: QCMalcoholsensor.csv<\/a><\/div>\n<table><thead><tr><th>CSV variable<\/th><th>Measurement<\/th><th>Air \/ gas ratio<\/th><th>Unit<\/th><th>Observed range<\/th><\/tr><\/thead><tbody><tr><td><code>frequency_1<\/code><\/td><td>Frequency shift at mixture 1<\/td><td>0.799 \/ 0.201<\/td><td>Hz<\/td><td>-86.34 to -9.40<\/td><\/tr><tr><td><code>frequency_2<\/code><\/td><td>Frequency shift at mixture 2<\/td><td>0.700 \/ 0.300<\/td><td>Hz<\/td><td>-129.71 to -21.44<\/td><\/tr><tr><td><code>frequency_3<\/code><\/td><td>Frequency shift at mixture 3<\/td><td>0.600 \/ 0.400<\/td><td>Hz<\/td><td>-183.94 to -34.39<\/td><\/tr><tr><td><code>frequency_4<\/code><\/td><td>Frequency shift at mixture 4<\/td><td>0.501 \/ 0.499<\/td><td>Hz<\/td><td>-231.08 to -48.61<\/td><\/tr><tr><td><code>frequency_5<\/code><\/td><td>Frequency shift at mixture 5<\/td><td>0.400 \/ 0.600<\/td><td>Hz<\/td><td>-296.68 to -63.62<\/td><\/tr><\/tbody><\/table>\n<h3>Class balance<\/h3>\n<table><thead><tr><th>Alcohol class<\/th><th>Samples<\/th><th>Share<\/th><\/tr><\/thead><tbody><tr><td>1-Isobutanol<\/td><td>5<\/td><td>20%<\/td><\/tr><tr><td>1-Octanol<\/td><td>5<\/td><td>20%<\/td><\/tr><tr><td>1-Propanol<\/td><td>5<\/td><td>20%<\/td><\/tr><tr><td>2-Butanol<\/td><td>5<\/td><td>20%<\/td><\/tr><tr><td>2-Propanol<\/td><td>5<\/td><td>20%<\/td><\/tr><\/tbody><\/table>\n<img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/qcm-alcohol-class-distribution-2026.png\" alt=\"Balanced distribution of five alcohol classes in the QCM12 example\">\n<h3>Configured split<\/h3>\n<table><thead><tr><th>Subset<\/th><th>Rows<\/th><th>Share<\/th><th>Classes represented<\/th><\/tr><\/thead><tbody><tr><td>Training<\/td><td>12<\/td><td>48%<\/td><td>5 of 5<\/td><\/tr><tr><td>Selection<\/td><td>3<\/td><td>12%<\/td><td>2 of 5<\/td><\/tr><tr><td>Testing<\/td><td>10<\/td><td>40%<\/td><td>5 of 5<\/td><\/tr><\/tbody><\/table>\n<div class=\"ndb-note ndb-note--warning\"><strong>Validation note.<\/strong> The random split is not stratified: the selection subset contains only 1-isobutanol and 1-octanol, while two testing classes contain only one row each. The reported test result is therefore a useful reproducibility check, not a robust estimate of deployment accuracy.<\/div><\/section>\n\n<section id=\"3-model\" class=\"ndb-card\"><h2>3. Neural network<\/h2>\n<p>The exported model standardizes the five frequency inputs and feeds them directly to five softmax neurons. The probabilities sum to one, and the class with the largest probability becomes the prediction. This compact 5\u20135 architecture contains 30 trainable parameters.<\/p>\n<img decoding=\"async\" class=\"ndb-architecture ndb-architecture--wide\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/qcm-alcohol-softmax-network-2026.png\" alt=\"QCM alcohol classifier with five frequency inputs and a five-class softmax output\">\n<div class=\"ndb-note\"><strong>Reading the diagram.<\/strong> Neural Designer displays one logical categorical output, <code>class<\/code>. Internally, the exported model evaluates five logits\u2014one per alcohol\u2014and applies a stable softmax to produce the probability distribution.<\/div><\/section>\n\n<section id=\"4-training\" class=\"ndb-card\"><h2>4. Training strategy<\/h2>\n<p>The network minimizes multiclass cross-entropy with no regularization using the quasi-Newton method. Training reached the configured loss goal after 19 epochs. The final recorded training loss is approximately <strong>0.0007<\/strong>, while the selection loss is approximately <strong>0.0023<\/strong>.<\/p>\n<img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/qcm-alcohol-training-history-2026.png\" alt=\"Quasi-Newton training and selection cross-entropy history for the QCM alcohol classifier\">\n<p>The low objective values show that this compact model separates the configured rows. Because only three observations are available for selection and three classes are absent from that subset, the selection curve should not be interpreted as evidence of reliable hyperparameter tuning.<\/p><\/section>\n\n<section id=\"5-selection\" class=\"ndb-card\"><h2>5. Validation design and decision rule<\/h2>\n<p>No architecture sweep is reported for this project; the 5\u20135 softmax network is used as a deliberately small baseline. The decision rule is <strong>argmax<\/strong>: select the class with the largest output probability.<\/p>\n<p>For a production-oriented study, keep the five-class objective but replace the single random split with repeated stratified validation. A stronger generalization test would reserve complete sensor configurations or measurement sessions, then evaluate probability calibration and an explicit \u201cunknown or low-confidence\u201d rejection rule.<\/p><\/section>\n\n<section id=\"6-testing\" class=\"ndb-card\"><h2>6. Testing analysis<\/h2>\n<p>The exported model was recalculated on the ten rows marked as testing in the Neural Designer project. All ten were assigned to the correct class. The majority-class baseline for this particular testing split is 30%.<\/p>\n<div class=\"ndb-kpis\"><div class=\"ndb-kpi\"><strong>100%<\/strong><span>testing accuracy<\/span><\/div><div class=\"ndb-kpi\"><strong>100%<\/strong><span>macro-F1<\/span><\/div><div class=\"ndb-kpi\"><strong>0.0000475<\/strong><span>testing cross-entropy<\/span><\/div><div class=\"ndb-kpi\"><strong>30%<\/strong><span>majority-class baseline<\/span><\/div><\/div>\n<h3>Confusion matrix<\/h3>\n<div class=\"ndb-table-scroll\"><table class=\"ndb-confusion\"><thead><tr><th>Actual \/ predicted<\/th><th>1-Isobutanol<\/th><th>1-Octanol<\/th><th>1-Propanol<\/th><th>2-Butanol<\/th><th>2-Propanol<\/th><th>Total<\/th><\/tr><\/thead><tbody>\n<tr><td>1-Isobutanol<\/td><td class=\"ndb-hit\">2<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>2<\/td><\/tr>\n<tr><td>1-Octanol<\/td><td>0<\/td><td class=\"ndb-hit\">3<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>3<\/td><\/tr>\n<tr><td>1-Propanol<\/td><td>0<\/td><td>0<\/td><td class=\"ndb-hit\">1<\/td><td>0<\/td><td>0<\/td><td>1<\/td><\/tr>\n<tr><td>2-Butanol<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td class=\"ndb-hit\">1<\/td><td>0<\/td><td>1<\/td><\/tr>\n<tr><td>2-Propanol<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td class=\"ndb-hit\">3<\/td><td>3<\/td><\/tr>\n<tr><td>Total<\/td><td>2<\/td><td>3<\/td><td>1<\/td><td>1<\/td><td>3<\/td><td>10<\/td><\/tr>\n<\/tbody><\/table><\/div>\n<h3>Per-class results<\/h3>\n<table><thead><tr><th>Class<\/th><th>Testing support<\/th><th>Precision<\/th><th>Recall<\/th><th>F1<\/th><\/tr><\/thead><tbody><tr><td>1-Isobutanol<\/td><td>2<\/td><td>100%<\/td><td>100%<\/td><td>100%<\/td><\/tr><tr><td>1-Octanol<\/td><td>3<\/td><td>100%<\/td><td>100%<\/td><td>100%<\/td><\/tr><tr><td>1-Propanol<\/td><td>1<\/td><td>100%<\/td><td>100%<\/td><td>100%<\/td><\/tr><tr><td>2-Butanol<\/td><td>1<\/td><td>100%<\/td><td>100%<\/td><td>100%<\/td><\/tr><tr><td>2-Propanol<\/td><td>3<\/td><td>100%<\/td><td>100%<\/td><td>100%<\/td><\/tr><\/tbody><\/table>\n<div class=\"ndb-note ndb-note--warning\"><strong>Interpretation.<\/strong> Perfect separation of ten benchmark rows is encouraging, but the support per class is only one to three. Accuracy, precision and F1 are therefore descriptive results for this split, not a validated field-performance claim.<\/div><\/section>\n\n<section id=\"7-model-deployment\" class=\"ndb-card\"><h2>7. Model deployment<\/h2>\n<p>A professional e-nose workflow should validate the experiment before classification: stabilize the sensor, control temperature and humidity, confirm a clean baseline, collect the five frequency shifts, evaluate the softmax probabilities and route uncertain samples to confirmatory analysis.<\/p>\n<div class=\"ndb-flow\"><div>Controlled QCM measurement<\/div><div>Stability, baseline and range checks<\/div><div>Five-class softmax model<\/div><div>Identity suggestion and laboratory review<\/div><\/div>\n<div class=\"ndb-case\"><h3>Real testing example: 1-isobutanol<\/h3><p>Testing row 22 contains the frequency signature below. The model assigns the largest probability to the recorded 1-isobutanol class.<\/p>\n<table><thead><tr><th>Input<\/th><th>Frequency shift<\/th><\/tr><\/thead><tbody><tr><td><code>frequency_1<\/code><\/td><td>-56.14 Hz<\/td><\/tr><tr><td><code>frequency_2<\/code><\/td><td>-90.74 Hz<\/td><\/tr><tr><td><code>frequency_3<\/code><\/td><td>-132.16 Hz<\/td><\/tr><tr><td><code>frequency_4<\/code><\/td><td>-178.79 Hz<\/td><\/tr><tr><td><code>frequency_5<\/code><\/td><td>-239.06 Hz<\/td><\/tr><\/tbody><\/table>\n<table><thead><tr><th>Class<\/th><th>Model probability<\/th><\/tr><\/thead><tbody><tr><td>1-Isobutanol<\/td><td>99.99998%<\/td><\/tr><tr><td>1-Octanol<\/td><td>&lt;0.00001%<\/td><\/tr><tr><td>1-Propanol<\/td><td>&lt;0.00001%<\/td><\/tr><tr><td>2-Butanol<\/td><td>&lt;0.00001%<\/td><\/tr><tr><td>2-Propanol<\/td><td>0.00002%<\/td><\/tr><\/tbody><\/table>\n<p><strong>Recommended interpretation:<\/strong> report 1-isobutanol as the model suggestion only if experimental controls and sensor-quality checks pass. A high softmax probability is not proof that an unrepresented vapour is absent.<\/p><\/div>\n\n<div class=\"ndb-calculator\" id=\"qcm-calculator\">\n<h3>Try the alcohol classifier<\/h3>\n<p>Enter five QCM frequency shifts or load a testing example. The browser uses the scaling, weights and stable softmax from the exported Python model.<\/p>\n<div class=\"ndb-sample-picker\"><label for=\"qcm-preset\">Verified example<\/label><select id=\"qcm-preset\"><option value=\"1-Isobutanol\">1-Isobutanol \u2014 verified testing sample<\/option><option value=\"1-Octanol\">1-Octanol \u2014 verified testing sample<\/option><option value=\"1-Propanol\">1-Propanol \u2014 verified testing sample<\/option><option value=\"2-Butanol\">2-Butanol \u2014 verified testing sample<\/option><option value=\"2-Propanol\">2-Propanol \u2014 verified testing sample<\/option><\/select><\/div>\n<form id=\"qcm-calculator-form\"><div class=\"ndb-calculator-grid\"><div class=\"ndb-field\"><label for=\"qcm-0\">Frequency shift at mixture 1 (Hz)<\/label><input id=\"qcm-0\" name=\"frequency_1\" type=\"number\" min=\"-86.34\" max=\"-9.4\" step=\"any\" value=\"-56.14\"><small>-86.34 to -9.4<\/small><\/div><div class=\"ndb-field\"><label for=\"qcm-1\">Frequency shift at mixture 2 (Hz)<\/label><input id=\"qcm-1\" name=\"frequency_2\" type=\"number\" min=\"-129.71\" max=\"-21.44\" step=\"any\" value=\"-90.74\"><small>-129.71 to -21.44<\/small><\/div><div class=\"ndb-field\"><label for=\"qcm-2\">Frequency shift at mixture 3 (Hz)<\/label><input id=\"qcm-2\" name=\"frequency_3\" type=\"number\" min=\"-183.94\" max=\"-34.39\" step=\"any\" value=\"-132.16\"><small>-183.94 to -34.39<\/small><\/div><div class=\"ndb-field\"><label for=\"qcm-3\">Frequency shift at mixture 4 (Hz)<\/label><input id=\"qcm-3\" name=\"frequency_4\" type=\"number\" min=\"-231.08\" max=\"-48.61\" step=\"any\" value=\"-178.79\"><small>-231.08 to -48.61<\/small><\/div><div class=\"ndb-field\"><label for=\"qcm-4\">Frequency shift at mixture 5 (Hz)<\/label><input id=\"qcm-4\" name=\"frequency_5\" type=\"number\" min=\"-296.68\" max=\"-63.62\" step=\"any\" value=\"-239.06\"><small>-296.68 to -63.62<\/small><\/div><\/div>\n<div class=\"ndb-calc-actions\"><button type=\"submit\">Classify sample<\/button><button type=\"button\" id=\"qcm-load\">Load selected example<\/button><\/div><\/form>\n<div class=\"ndb-output\" aria-live=\"polite\"><span>Most probable class<\/span><strong id=\"qcm-class\">\u2014<\/strong><\/div>\n<div class=\"ndb-probability-grid\" aria-live=\"polite\"><div class=\"ndb-probability\"><span>1-Isobutanol<\/span><strong id=\"qcm-o0\">\u2014<\/strong><em id=\"qcm-s0\">\u2014<\/em><\/div><div class=\"ndb-probability\"><span>1-Octanol<\/span><strong id=\"qcm-o1\">\u2014<\/strong><em id=\"qcm-s1\">\u2014<\/em><\/div><div class=\"ndb-probability\"><span>1-Propanol<\/span><strong id=\"qcm-o2\">\u2014<\/strong><em id=\"qcm-s2\">\u2014<\/em><\/div><div class=\"ndb-probability\"><span>2-Butanol<\/span><strong id=\"qcm-o3\">\u2014<\/strong><em id=\"qcm-s3\">\u2014<\/em><\/div><div class=\"ndb-probability\"><span>2-Propanol<\/span><strong id=\"qcm-o4\">\u2014<\/strong><em id=\"qcm-s4\">\u2014<\/em><\/div><\/div>\n<p class=\"ndb-calc-status\" id=\"qcm-status\">Closed-set demonstration \u2014 not a certified gas detector, safety alarm or concentration estimator.<\/p>\n<\/div>\n<script>\n(function(){\nconst form=document.getElementById(\"qcm-calculator-form\");if(!form)return;\nconst ids=[\"qcm-0\",\"qcm-1\",\"qcm-2\",\"qcm-3\",\"qcm-4\"];\nconst names=[\"1-Isobutanol\", \"1-Octanol\", \"1-Propanol\", \"2-Butanol\", \"2-Propanol\"];\nconst presets={\"1-Isobutanol\": [-56.14, -90.74, -132.16, -178.79, -239.06], \"1-Octanol\": [-9.4, -21.44, -34.39, -48.61, -63.62], \"1-Propanol\": [-52.71, -98.57, -149.15, -206.98, -269.29], \"2-Butanol\": [-80.61, -119.26, -175.38, -231.08, -296.68], \"2-Propanol\": [-69.99, -109.66, -149.9, -186.32, -213.69]};\nfunction softmax(z){const m=Math.max(...z),e=z.map(v=>Math.exp(v-m)),s=e.reduce((a,b)=>a+b,0);return e.map(v=>v\/s)}\nfunction calculate(){\nconst fields=ids.map(id=>document.getElementById(id)),x=fields.map(f=>Number(f.value));\nif(x.some(v=>!Number.isFinite(v))){document.getElementById(\"qcm-status\").textContent=\"Enter a valid number in every field.\";return}\nlet outside=false;fields.forEach((f,i)=>{const bad=x[i]<Number(f.min)||x[i]>Number(f.max);f.setAttribute(\"aria-invalid\",bad?\"true\":\"false\");outside=outside||bad});\nconst s=[(x[0]+61.69829941)\/17.28370094,(x[1]+103.2220001)\/24.68330002,(x[2]+150.9100037)\/35.24689865,(x[3]+197.1719971)\/45.18780136,(x[4]+251.6060028)\/59.64870071];\nconst z=[\n8.561348915+5.285395145*s[0]+15.46567535*s[1]+17.52828598*s[2]+11.75212955*s[3]+2.506811619*s[4],\n-27.3754406+11.2169075*s[0]+15.090868*s[1]+14.49424171*s[2]+14.9052496*s[3]+13.94061184*s[4],\n14.3547678+22.92124367*s[0]+3.764050722*s[1]-1.95269382*s[2]-21.00546265*s[3]-25.73941231*s[4],\n-6.964161873-28.12533379*s[0]-23.6952343*s[1]-29.92310524*s[2]-24.57377243*s[3]-24.85437965*s[4],\n11.42352486-11.23465443*s[0]-10.5165987*s[1]-.3149858415*s[2]+19.39770889*s[3]+34.40479279*s[4]\n];\nconst p=softmax(z),winner=p.indexOf(Math.max(...p));\ndocument.getElementById(\"qcm-class\").textContent=names[winner];\np.forEach((value,i)=>{document.getElementById(\"qcm-o\"+i).textContent=(100*value).toFixed(value>.9999?4:2)+\"%\";document.getElementById(\"qcm-s\"+i).textContent=i===winner?\"Highest probability\":\"Alternative class\"});\ndocument.getElementById(\"qcm-status\").textContent=outside?\"Warning: at least one input is outside the training range; this classification should not be trusted.\":\"All five inputs are within their individual observed ranges. This does not confirm that every combination is represented.\";\n}\nfunction loadPreset(){const values=presets[document.getElementById(\"qcm-preset\").value];ids.forEach((id,i)=>document.getElementById(id).value=values[i]);calculate()}\nform.addEventListener(\"submit\",e=>{e.preventDefault();calculate()});\ndocument.getElementById(\"qcm-load\").addEventListener(\"click\",loadPreset);\nloadPreset();\n})();\n<\/script>\n<h3>Download and reproduce<\/h3><div class=\"ndb-downloads\"><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/qcm-alcohol-sensor-python-model-2026.zip\">Download Python model (ZIP)<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/qcm-alcohol-sensor-project-2026.zip\">Download Neural Designer project + CSV (ZIP)<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/07\/QCMalcoholsensor.csv\">Download QCMalcoholsensor.csv<\/a><\/div><\/section>\n\n<section id=\"8-limitations\" class=\"ndb-card\"><h2>8. Scope and limitations<\/h2><ul>\n<li>This example uses 25 observations from the QCM12 subset; the full UCI collection contains 125 observations across five QCM sensor configurations.<\/li>\n<li>The model recognizes only the five alcohols represented during training. It has no \u201cunknown\u201d, mixture or contaminated-sample class.<\/li>\n<li>The five inputs are measurements at specified mixture ratios; this model is not a concentration estimator.<\/li>\n<li>The random, non-stratified split does not demonstrate transfer to another sensor, coating, measurement session or laboratory.<\/li>\n<li>Temperature, humidity, baseline drift, sensor ageing, response and recovery dynamics are not modelled as inputs.<\/li>\n<li>Individual input ranges do not guarantee that an arbitrary combination of five values is physically represented.<\/li>\n<li>Production use requires repeated measurements, calibration monitoring, an uncertainty or rejection policy and confirmation against an appropriate analytical method.<\/li>\n<li>The classifier supports controlled screening; it must not replace certified gas detection, occupational exposure monitoring or safety alarms.<\/li><\/ul><\/section>\n\n<section id=\"references\" class=\"ndb-card\"><h2>References<\/h2><ul><li>UCI Machine Learning Repository. <a href=\"https:\/\/archive.ics.uci.edu\/dataset\/496\/alcohol%2Bqcm%2Bsensor%2Bdataset\">Alcohol QCM Sensor Dataset<\/a>, DOI: <a href=\"https:\/\/doi.org\/10.24432\/C5KC7M\">10.24432\/C5KC7M<\/a>.<\/li><li>E. \u00d6zmen et al. <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S2352340918309142\">An electronic nose dataset for identification of five different alcohols<\/a>, Data in Brief.<\/li><li><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/testing-analysis\/\">Neural Designer testing analysis<\/a>: confusion matrices and classification metrics.<\/li><li><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment\/\">Neural Designer model deployment<\/a>: output calculation and Python export.<\/li><\/ul><\/section>\n<\/div><\/div>","protected":false},"author":13,"featured_media":2720,"template":"","categories":[29],"tags":[40,43],"class_list":["post-3518","learning","type-learning","status-publish","has-post-thumbnail","hentry","category-examples","tag-chemistry","tag-industry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Develop an e-nose to detect alcohols using machine learning<\/title>\n<meta name=\"description\" content=\"Develop a e-nose that makes proper classifications for different alcohol types using QCM sensor data using machine learning.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"QCM alcohol sensor machine learning example\" \/>\n<meta property=\"og:description\" content=\"In this example, we develop a classification alcohol types method.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/\" \/>\n<meta property=\"og:site_name\" content=\"Neural Designer\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T12:03:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"QCM alcohol sensor machine learning example\" \/>\n<meta name=\"twitter:description\" content=\"In this example, we develop a classification alcohol types method.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp\" \/>\n<meta name=\"twitter:site\" content=\"@NeuralDesigner\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/\",\"name\":\"Develop an e-nose to detect alcohols using machine learning\",\"isPartOf\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp\",\"datePublished\":\"2025-08-15T09:12:58+00:00\",\"dateModified\":\"2026-08-25T12:03:34+00:00\",\"description\":\"Develop a e-nose that makes proper classifications for different alcohol types using QCM sensor data using machine learning.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#primaryimage\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp\",\"width\":1200,\"height\":628,\"caption\":\"3D model of a 2-butanol molecule\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.neuraldesigner.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learning\",\"item\":\"https:\/\/www.neuraldesigner.com\/learning\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Develop an e-nose to detect alcohols using machine learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"name\":\"Neural Designer\",\"description\":\"Explainable AI Platform\",\"publisher\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.neuraldesigner.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\",\"name\":\"Neural Designer\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"width\":1024,\"height\":223,\"caption\":\"Neural Designer\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NeuralDesigner\",\"https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Develop an e-nose to detect alcohols using machine learning","description":"Develop a e-nose that makes proper classifications for different alcohol types using QCM sensor data using machine learning.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/","og_locale":"en_US","og_type":"article","og_title":"QCM alcohol sensor machine learning example","og_description":"In this example, we develop a classification alcohol types method.","og_url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/","og_site_name":"Neural Designer","article_modified_time":"2026-08-25T12:03:34+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_title":"QCM alcohol sensor machine learning example","twitter_description":"In this example, we develop a classification alcohol types method.","twitter_image":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp","twitter_site":"@NeuralDesigner","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/","url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/","name":"Develop an e-nose to detect alcohols using machine learning","isPartOf":{"@id":"https:\/\/www.neuraldesigner.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#primaryimage"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#primaryimage"},"thumbnailUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp","datePublished":"2025-08-15T09:12:58+00:00","dateModified":"2026-08-25T12:03:34+00:00","description":"Develop a e-nose that makes proper classifications for different alcohol types using QCM sensor data using machine learning.","breadcrumb":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#primaryimage","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/2-but.webp","width":1200,"height":628,"caption":"3D model of a 2-butanol molecule"},{"@type":"BreadcrumbList","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/qcm-alcohol-sensor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.neuraldesigner.com\/"},{"@type":"ListItem","position":2,"name":"Learning","item":"https:\/\/www.neuraldesigner.com\/learning\/"},{"@type":"ListItem","position":3,"name":"Develop an e-nose to detect alcohols using machine learning"}]},{"@type":"WebSite","@id":"https:\/\/www.neuraldesigner.com\/#website","url":"https:\/\/www.neuraldesigner.com\/","name":"Neural Designer","description":"Explainable AI Platform","publisher":{"@id":"https:\/\/www.neuraldesigner.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.neuraldesigner.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.neuraldesigner.com\/#organization","name":"Neural Designer","url":"https:\/\/www.neuraldesigner.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","width":1024,"height":223,"caption":"Neural Designer"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NeuralDesigner","https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning"}],"about":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/types\/learning"}],"author":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/users\/13"}],"version-history":[{"count":23,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3518\/revisions"}],"predecessor-version":[{"id":23684,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3518\/revisions\/23684"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media\/2720"}],"wp:attachment":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media?parent=3518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/categories?post=3518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/tags?post=3518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}