<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Projects on This Might Be Something!</title><link>https://notes.danavery.com/categories/projects/</link><description>Recent content in Projects on This Might Be Something!</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 15 May 2025 12:27:54 -0700</lastBuildDate><atom:link href="https://notes.danavery.com/categories/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>Kernel Shape in a CNN Audio Model</title><link>https://notes.danavery.com/posts/2025-05-15-kernel-shape/</link><pubDate>Thu, 15 May 2025 12:27:54 -0700</pubDate><guid>https://notes.danavery.com/posts/2025-05-15-kernel-shape/</guid><description>&lt;p&gt;(Code on &lt;a href="https://github.com/danavery/kernel_shapes.git"&gt;GitHub&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Audio has a strong temporal component. Unlike an image, audio is a thing that happens in time, not an arrangement of items in a space. And yet many audio classification models treat spectrograms as if they were still images and not events, an artifact of early successes applying visual models to audio datasets.&lt;/p&gt;
&lt;p&gt;I took the ESC-50 dataset, created a simple five-layer CNN model, and trained it with various kernel shapes and sizes. My hypothesis: &lt;strong&gt;kernels that extend more in the temporal dimension will have better performance.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>One Double RoBERTa, with a Side of Strange</title><link>https://notes.danavery.com/posts/2025-05-06-double-roberta/</link><pubDate>Tue, 06 May 2025 12:45:57 -0700</pubDate><guid>https://notes.danavery.com/posts/2025-05-06-double-roberta/</guid><description>Token encoding patterns in roberta-large are harder to spot than in roberta-base. Same architecture, more capacity, very different dynamics.</description></item><item><title>What's Going On at Layer 5?</title><link>https://notes.danavery.com/posts/2025-04-29-layer-5/</link><pubDate>Tue, 29 Apr 2025 13:25:15 -0700</pubDate><guid>https://notes.danavery.com/posts/2025-04-29-layer-5/</guid><description>In layer 5 of the RoBERTa transformer model, there&amp;#39;s a huge jump in token encodings at attention layer 5. Which tokens are affected, and why?</description></item><item><title>More Attention to Attention</title><link>https://notes.danavery.com/posts/2025-04-22-more-attention/</link><pubDate>Tue, 22 Apr 2025 10:51:26 -0700</pubDate><guid>https://notes.danavery.com/posts/2025-04-22-more-attention/</guid><description>How much does a token&amp;#39;s meaning shift across transformer layers? I compared three metrics and found that each one shows a different part of the picture.</description></item><item><title>Paying Attention Part 2</title><link>https://notes.danavery.com/posts/2024-11-08-paying-attention-part-2/</link><pubDate>Fri, 08 Nov 2024 11:59:45 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-11-08-paying-attention-part-2/</guid><description>&lt;p&gt;A greatly-revised attention-encodings project is out and available &lt;a href="http://demo.danavery.com/attention-encodings"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I realized in the previous incarnation of this project I was comparing per-head attention outputs to value-encodings over the entire model vocabulary, which was a clever idea. The problem is that I forgot about the residual connection around the attention mechanism. So the project was essentially comparing the residual &amp;ldquo;deltas&amp;rdquo; against the original encodings, which might make some sense if you were just wondering how &amp;ldquo;far&amp;rdquo; an encoding moves at each layer.&lt;/p&gt;</description></item><item><title>Paying Attention to Attention</title><link>https://notes.danavery.com/posts/2024-10-31-paying-attention/</link><pubDate>Thu, 31 Oct 2024 10:15:13 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-10-31-paying-attention/</guid><description>&lt;p&gt;Fresh off the last experiment, I&amp;rsquo;ve decided to go back to an old experiment and dig a little deeper.&lt;/p&gt;
&lt;p&gt;A while ago I was working on &lt;a href="https://demo.danavery.com/attention-encodings"&gt;an experiment&lt;/a&gt; trying to figure out what attention layers are actually doing in transformers.&lt;/p&gt;
&lt;p&gt;The traditional introduction to transformers goes something like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You turn your text into tokens&lt;/li&gt;
&lt;li&gt;You create embeddings for each of those tokens&lt;/li&gt;
&lt;li&gt;Some additions and projections later, that token encoding goes into an attention layer, at a particular spot in the sequence based on the order of the text. Let&amp;rsquo;s assume our token is at position 3.&lt;/li&gt;
&lt;li&gt;The attention layer compares that token encoding to all the others in the sequence (query and keys, yes yes), and uses the relative weights of their similarities as weights to apply to the original embeddings in the sequence (projected by a value matrix.) (This won&amp;rsquo;t make sense if you don&amp;rsquo;t already know how transformers work, for which I apologize.)&lt;/li&gt;
&lt;li&gt;The output of that attention layer at position 3 is the original token, but with information from closely-related tokens mashed into it. So it&amp;rsquo;s a wider, more conceptually complex representation of the original token at position 3.&lt;/li&gt;
&lt;li&gt;Do this 12 times with some standard fully-connected neural networks in-between, and you end up with a new sequence where each encoding is a representation of that original token, but with &amp;ldquo;meaning&amp;rdquo; infused based on the overall context of every other token in the sequence.&lt;/li&gt;
&lt;li&gt;Use those fancy high-class output encodings to predict the next token, or classify your sequence, or whatever.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But that &amp;ldquo;output of the attention layer is another form of the original token&amp;rdquo; has always been interesting to me. What does an encoding like that look like? Can you do something else with it? Does it relate back to the original token in an interesting way?&lt;/p&gt;</description></item><item><title>Audio Tokens Part 18: The Wrap-Up</title><link>https://notes.danavery.com/posts/2024-10-07-audio-tokens-part-18/</link><pubDate>Mon, 07 Oct 2024 10:41:02 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-10-07-audio-tokens-part-18/</guid><description>&lt;p&gt;&lt;em&gt;Updated 2025-04-22 with a brief intro for context.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This project explored whether short-time audio features (STFT slices) could be clustered into symbolic “tokens” and modeled using sequence architectures like BERT. It didn’t work out the way I’d hoped, but I figured out a lot about where this kind of approach breaks down, and what might be worth trying next. (Also, I spent a few days chasing phantom performance gains thanks to a classic extend() vs append() bug.)&lt;/p&gt;
&lt;p&gt;⸻&lt;/p&gt;</description></item><item><title>Audio Tokens Part 17: All Sane, So Far</title><link>https://notes.danavery.com/posts/2024-10-03-audio-tokens-part-17/</link><pubDate>Thu, 03 Oct 2024 18:39:28 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-10-03-audio-tokens-part-17/</guid><description>&lt;p&gt;Here&amp;rsquo;s my checklist from the last post:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Look at a few more generated spectrograms.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do they look sane? Continue.&lt;/li&gt;
&lt;li&gt;Do they look insane? Fix the spectrograms!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They look sane. Moving on.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try the spectrograms with a standard vanilla CNN of the type that is known to work well on spectrograms.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do the results improve significantly? End this round of this project and move on&amp;ndash;it doesn&amp;rsquo;t work as-is.&lt;/li&gt;
&lt;li&gt;Do the results not improve significantly? Keep going.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are roughly the same as all the other models. Peak val mAP I can get is 0.03-ish. Continuing.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 16: Sanity Checks for Everyone!</title><link>https://notes.danavery.com/posts/2024-10-03-audio-tokens-part-16/</link><pubDate>Thu, 03 Oct 2024 10:17:07 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-10-03-audio-tokens-part-16/</guid><description>&lt;p&gt;I&amp;rsquo;ve been on a bit of a tear the past few days (right now at commit 3550615). I separated out the Dataset/DataLoader processing into its own classes,moved metrics calculation into its own class, did a bit of cleanup refactoring, and all of that so I could start just sending the raw STFT vectors into models as embeddings, and also add a new dirt-simple baseline model.&lt;/p&gt;
&lt;p&gt;All of this to try to figure out if the consistently terrible val mAP results that seem to happen on every variation of model and hyperparameters are just because this idea doesn&amp;rsquo;t work as-is, or if there might be another bug in the preprocessing pipeline mucking things up.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 15: Onward or Not?</title><link>https://notes.danavery.com/posts/2024-09-30-audio-tokens-part-15/</link><pubDate>Mon, 30 Sep 2024 10:48:36 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-30-audio-tokens-part-15/</guid><description>&lt;p&gt;Carrying on from the last post, I tried several different combinations of STFT, LSTM, and clustering parameters. Without going into detail about all the things I tried, we can just skip to the results:&lt;/p&gt;</description></item><item><title>Audio Tokens Part 14: Back to Square 0.01</title><link>https://notes.danavery.com/posts/2024-09-27-audio-tokens-part-14/</link><pubDate>Fri, 27 Sep 2024 10:23:00 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-27-audio-tokens-part-14/</guid><description>&lt;p&gt;For reasons that may be obvious from the previous post, I needed to take a day off. Way too much time spent on a Python append/extend mixup for my taste.&lt;/p&gt;
&lt;p&gt;That bug has been in ModelTrainer from the initial commit. So all the metrics from the past few weeks were invalid. Now that that is fixed, the real, unadulterated results from the current setup are really, really, really not good.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 13: The Big Bug</title><link>https://notes.danavery.com/posts/2024-09-25-audio-tokens-part-13/</link><pubDate>Wed, 25 Sep 2024 10:41:33 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-25-audio-tokens-part-13/</guid><description>&lt;p&gt;Batch clustering loops fixed, so large training sets are doable now.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s run a ~80,000 sample from the training sets, with ~8000 as validation:&lt;/p&gt;</description></item><item><title>Audio Tokens Part 12: A Minor Bug Squash</title><link>https://notes.danavery.com/posts/2024-09-24-audio-tokens-part-12/</link><pubDate>Tue, 24 Sep 2024 14:25:29 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-24-audio-tokens-part-12/</guid><description>&lt;p&gt;I decided that rather than find out why things were so much worse before that one commit, I&amp;rsquo;d look for data leakage in the newer, better-performing code.&lt;/p&gt;
&lt;p&gt;And I haven&amp;rsquo;t found any. The train/dev split is straighforward, using python indexing of a shuffled list of youtube ids. The centroids are computed only from training data. And the model training keeps the train and val data separate in two different Dataset classes.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 11: The Hunt</title><link>https://notes.danavery.com/posts/2024-09-23-audio-tokens-part-11/</link><pubDate>Mon, 23 Sep 2024 10:56:55 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-23-audio-tokens-part-11/</guid><description>&lt;p&gt;Today I&amp;rsquo;m hunting down which commit moved my validation mAP from 0.15 to 0.41. One of two things happened here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A large bug was fixed, and performance was improved.&lt;/li&gt;
&lt;li&gt;A large bug was introduced, and the improved performance is a lie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Time to track that down, so I&amp;rsquo;m going back commit by commit to find where the bump happened. Apparently I did so many small housekeeping commits back there that I just missed the big bump in reported performance. Let&amp;rsquo;s go back and find it:&lt;/p&gt;</description></item><item><title>Audio Tokens Part 10: Ruling Out the Obvious, Leaving Only the Obvious</title><link>https://notes.danavery.com/posts/2024-09-20-audio-tokens-part-10/</link><pubDate>Fri, 20 Sep 2024 11:08:49 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-20-audio-tokens-part-10/</guid><description>&lt;p&gt;I spend most of yesterday scouring the code for train/dev data leakage, and not much luck. I also fixed up the 1D pre-processing convolution I thought I had got working before so it works now. But back to the weird thing about those high metrics.&lt;/p&gt;
&lt;p&gt;I also got most of the code ready for using more of the AudioSet training data, which mostly meant batching things instead of keeping the entire active training dataset in memory.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 9: What the bug?</title><link>https://notes.danavery.com/posts/2024-09-19-audio-tokens-part-9/</link><pubDate>Thu, 19 Sep 2024 12:04:52 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-19-audio-tokens-part-9/</guid><description>&lt;p&gt;I going to crack open the AudioSet unbalanced_train set here. Only 20,000 training examples may not be enough. The unbalanced train set has around 2 MILLION examples. (The final eval set in AudioSet is only 20,000 items, which seems like not nearly enough, but then again I&amp;rsquo;m no fancy big-city Google researcher.) Which means I may need to stop keeping everything in memory during preprocessing, now doesn&amp;rsquo;t it?&lt;/p&gt;
&lt;p&gt;So I rewrote a bunch of stuff yesterday to allow for a larger training set, consolidate up the train/dev split code, and clean up the TokenizedSpecDataset class.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 8: Convoluted</title><link>https://notes.danavery.com/posts/2024-09-17-audio-tokens-part-8/</link><pubDate>Tue, 17 Sep 2024 11:03:29 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-17-audio-tokens-part-8/</guid><description>&lt;p&gt;[Update 19 Sep: Funny thing, this actually didn&amp;rsquo;t work out as planned. I forget to turn tokenization on for these examples. So the below change looks to be a random blip of some sort, not from adding convolution. Going to try to &lt;em&gt;really&lt;/em&gt; add it later. Also, the comment below about running the same data over and over again accidentally was sort of true.]&lt;/p&gt;
&lt;p&gt;Before switching to major, focus-shifting architecture changes here I figured I&amp;rsquo;d try something simpler first. From the last update, I&amp;rsquo;m taking the first option: run a basic 1D convolution on the STFT time-slices to try to make them a bit more frequency-invariant. Eight kernels, kernels size 3, and just concatting them together to create the new input for the K-Means clustering. The previous input, recall, was just the entire STFT time-slice vector as-is.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 7: Reconsidering</title><link>https://notes.danavery.com/posts/2024-09-16-audio-tokens-part-7/</link><pubDate>Mon, 16 Sep 2024 11:28:56 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-16-audio-tokens-part-7/</guid><description>&lt;p&gt;Given the current (lack of) performance of this model, I&amp;rsquo;m spending some time rethinking some of the basic ideas. For those of you following along at home, you may have been shouting at the screen since Part 1 trying to get me to see one large flaw in my tokenizing setup.&lt;/p&gt;
&lt;p&gt;Every STFT time slice is a set of particular frequencies at a moment in time. Which would probably work fine if the labels were about, for example, recognizing individual dogs. But our labels here are things like &amp;ldquo;dog barking&amp;rdquo; vs. &amp;ldquo;pneumatic drill&amp;rdquo; not &amp;ldquo;cute little Fluffy barking&amp;rdquo; vs &amp;ldquo;Butch barking right before he eats someone&amp;rdquo;. Some dogs have high frequency barks and some have low frequency barks, and STFT vectors from those two dog barks would be nowhere near each other in the vector space.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 6: Slightly Less Basic</title><link>https://notes.danavery.com/posts/2024-09-12-audio-tokens-part-6/</link><pubDate>Thu, 12 Sep 2024 10:34:54 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-12-audio-tokens-part-6/</guid><description>&lt;p&gt;In our last episode, I had managed to get a dead-simple model to overfit on the sequences when cranking up the number of tokens in the vocabulary. This probably means one of two things (or probably something in between):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The audio tokens have some useful information in them that can be generalized.&lt;/li&gt;
&lt;li&gt;The audio tokens have no useful information in them, and the overfitting is just because the model is able to memorize the embedding averages when there are many more embeddings involved.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s bet on the first one for now. Keep the spectrogram and token generation as-is, and try a &lt;em&gt;slightly&lt;/em&gt; more complex model. Say hello to SimpleLSTMClassifier.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 5: Back to Basics</title><link>https://notes.danavery.com/posts/2024-09-11-audio-tokens-part-5/</link><pubDate>Wed, 11 Sep 2024 11:35:29 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-11-audio-tokens-part-5/</guid><description>&lt;p&gt;OK, so things aren&amp;rsquo;t working as well as I&amp;rsquo;d hoped out of the box. Time to try a new box. Or a new metaphor.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to try a super-simple network just to see if I can get something to fit.&lt;/p&gt;
&lt;p&gt;Enter SimpleTokenClassifier. Take the tokens, create embeddings, average pool them, shove them through a linear layer and see if anything useful comes out. With 50 tokens:&lt;/p&gt;
&lt;p&gt;&lt;img alt="val mAP maxing out at 0.125" loading="lazy" src="https://notes.danavery.com/posts/2024-09-11-audio-tokens-part-5/mild-morning-val_mAP.png"&gt;&lt;/p&gt;</description></item><item><title>Audio Tokens Part 4: More Tokens!</title><link>https://notes.danavery.com/posts/2024-09-05-audio-tokens-part-4/</link><pubDate>Thu, 05 Sep 2024 16:54:43 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-05-audio-tokens-part-4/</guid><description>&lt;p&gt;Well, more types of tokens, anyway. Instead of a limited vocabulary of 50 tokens, let&amp;rsquo;s try something a little more interesting. Like 1000.
[time passes]
Ran it, here&amp;rsquo;s an excerpt:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;2024-09-05 18:16:23,258 - INFO - Epoch 9
2024-09-05 18:16:23,258 - INFO - Train Loss: 0.0210, Train F1 (macro): 0.4990, Train F1 (micro): 0.9962, Train Hamming Loss: 0.0038, Train mAP: 0.0824
2024-09-05 18:16:23,258 - INFO - Val Loss: 0.0209, Val F1 (macro): 0.4991, Val F1 (micro): 0.9962, Val Hamming Loss: 0.0038, Val mAP: 0.0826
Training: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 1022/1022 [07:40&amp;lt;00:00, 2.22it/s, loss=0.0169]
Validating: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 146/146 [00:20&amp;lt;00:00, 7.22it/s]
2024-09-05 18:24:33,739 - INFO - Epoch 10
2024-09-05 18:24:33,739 - INFO - Train Loss: 0.0210, Train F1 (macro): 0.4990, Train F1 (micro): 0.9962, Train Hamming Loss: 0.0038, Train mAP: 0.0810
2024-09-05 18:24:33,739 - INFO - Val Loss: 0.0209, Val F1 (macro): 0.4991, Val F1 (micro): 0.9962, Val Hamming Loss: 0.0038, Val mAP: 0.0893
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s&amp;hellip;terrible. Let&amp;rsquo;s try bumping the learning rate from 5e-5 to 1e-3 just to show that we&amp;rsquo;re serious.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 3: The First Run</title><link>https://notes.danavery.com/posts/2024-09-05-audio-tokens-part-3/</link><pubDate>Thu, 05 Sep 2024 13:49:40 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-05-audio-tokens-part-3/</guid><description>&lt;p&gt;Time to try the first run at training the model. Let&amp;rsquo;s see what happens!&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;2024-09-05 13:59:48,289 - INFO - Epoch 1
2024-09-05 13:59:48,289 - INFO - Train Loss: 0.0429, Train F1 (macro): 0.4998, Train F1 (micro): 0.9946, Train Hamming Loss: 0.0054, Train mAP: 0.0106
2024-09-05 13:59:48,289 - INFO - Val Loss: 0.0210, Val F1 (macro): 0.4991, Val F1 (micro): 0.9962, Val Hamming Loss: 0.0038, Val mAP: 0.1074
Training: 100%|████████████████████████████████████| 1022/1022 [07:40&amp;lt;00:00, 2.22it/s, loss=0.0196]
Validating: 100%|█████████████████████████████████████████████████| 146/146 [00:20&amp;lt;00:00, 7.16it/s]
2024-09-05 14:07:58,594 - INFO - Epoch 2
2024-09-05 14:07:58,594 - INFO - Train Loss: 0.0208, Train F1 (macro): 0.5210, Train F1 (micro): 0.9962, Train Hamming Loss: 0.0038, Train mAP: 0.1135
2024-09-05 14:07:58,594 - INFO - Val Loss: 0.0205, Val F1 (macro): 0.5629, Val F1 (micro): 0.9962, Val Hamming Loss: 0.0038, Val mAP: 0.1144
Training: 100%|████████████████████████████████████| 1022/1022 [07:40&amp;lt;00:00, 2.22it/s, loss=0.0153]
Validating: 100%|█████████████████████████████████████████████████| 146/146 [00:20&amp;lt;00:00, 7.17it/s]
[...]
2024-09-05 15:21:42,568 - INFO - Epoch 11
2024-09-05 15:21:42,568 - INFO - Train Loss: 0.0177, Train F1 (macro): 0.5805, Train F1 (micro): 0.9963, Train Hamming Loss: 0.0037, Train mAP: 0.1851
2024-09-05 15:21:42,568 - INFO - Val Loss: 0.0188, Val F1 (macro): 0.5663, Val F1 (micro): 0.9963, Val Hamming Loss: 0.0037, Val mAP: 0.1548
Training: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 1022/1022 [07:41&amp;lt;00:00, 2.21it/s, loss=0.0215]
Validating: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 146/146 [00:20&amp;lt;00:00, 7.15it/s]
[...]
2024-09-05 16:27:17,502 - INFO - Epoch 19
2024-09-05 16:27:17,502 - INFO - Train Loss: 0.0116, Train F1 (macro): 0.6765, Train F1 (micro): 0.9968, Train Hamming Loss: 0.0032, Train mAP: 0.4616
2024-09-05 16:27:17,502 - INFO - Val Loss: 0.0208, Val F1 (macro): 0.5698, Val F1 (micro): 0.9962, Val Hamming Loss: 0.0038, Val mAP: 0.1095
Training: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 1022/1022 [07:41&amp;lt;00:00, 2.21it/s, loss=0.0116]
Validating: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 146/146 [00:20&amp;lt;00:00, 7.13it/s]
2024-09-05 16:35:29,332 - INFO - Epoch 20
2024-09-05 16:35:29,332 - INFO - Train Loss: 0.0103, Train F1 (macro): 0.7092, Train F1 (micro): 0.9970, Train Hamming Loss: 0.0030, Train mAP: 0.5503
2024-09-05 16:35:29,332 - INFO - Val Loss: 0.0212, Val F1 (macro): 0.5895, Val F1 (micro): 0.9960, Val Hamming Loss: 0.0040, Val mAP: 0.1201
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So, um. Reading the mAP values, it starts at bad, increases to slightly less bad, then the overfitting kicks in and training mAP gets excellent and validation mAP drops to bad again. Not great.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 2: The Architecture</title><link>https://notes.danavery.com/posts/2024-09-04-audio-tokens-part-2/</link><pubDate>Wed, 04 Sep 2024 11:11:12 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-04-audio-tokens-part-2/</guid><description>&lt;p&gt;Here&amp;rsquo;s how things are set up now, in preparation for the first real training test:&lt;/p&gt;
&lt;p&gt;(I&amp;rsquo;ve skipped over the &amp;ldquo;is this thing basically working&amp;rdquo; phase here, since it wasn&amp;rsquo;t that exciting. Take it as given that each component seems to be working as expected.)&lt;/p&gt;
&lt;h3 id="training-set"&gt;Training Set&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m using the AudioSet &amp;ldquo;bal_train&amp;rdquo; set, since it&amp;rsquo;s only around 20,000 files. AudioSet files are 10-second clips from YouTube videos.&lt;/p&gt;
&lt;h3 id="validation-set"&gt;Validation Set&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m using a very sophisticated technique in data_splitter.py to pull a validation set out of the bal_train set. If the associated YouTube ID for an audio clip starts with one of the characters [ABCDEF], it&amp;rsquo;s a validation example. Assuming YouTube IDs are random-ish, this isn&amp;rsquo;t totally terrible.&lt;/p&gt;</description></item><item><title>Audio Tokens Part 1: The Task</title><link>https://notes.danavery.com/posts/2024-09-03-audio-tokens-part-1/</link><pubDate>Tue, 03 Sep 2024 21:02:42 -0700</pubDate><guid>https://notes.danavery.com/posts/2024-09-03-audio-tokens-part-1/</guid><description>&lt;p&gt;[7 Oct 2024 update: There&amp;rsquo;s a lot here in this worklog, dead ends and all. If you&amp;rsquo;re looking for the tl;dr/wrap-up, may I suggest
&lt;a href="../2024-10-07-audio-tokens-part-18"&gt;the final (for now) post&lt;/a&gt;?]&lt;/p&gt;
&lt;p&gt;[23 Sep 2024 update: This is a work log largely for my personal use: &amp;ldquo;Remember kids, the only difference between screwing around and science is writing it down&amp;rdquo;. There are mistakes and dead-ends and obvious oversights and serious facepalm moments. My plan is to leave in all the screwups, not try to retcon things later into a &amp;ldquo;I knew this from the beginning&amp;rdquo; sort of thing. As of today, things are still in progress, and there are ten of these entries. I expect there will be more.]&lt;/p&gt;</description></item></channel></rss>