Remove hint.html and index.html
As per discussions on GitHub the index.html and hint.html files should be deleted in favour of README.md files (from any .text/.txt/.markdown/.md files which will be turned into README.md in an upcoming commit).
This commit is contained in:
1 parent
ee8a36310f
commit
77fb0f11a2
143 files changed
-28606
No files matched your search
@@ -1,329 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="GENERATOR" content="mkd2html 2.1.3 DL=DISCOUNT">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
||||
<link rel="stylesheet"
|
||||
type="text/css"
|
||||
href="../hint.css">
|
||||
<title>Most self deprecating</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Most self deprecating</h1>
|
||||
|
||||
<p>David Lowe<br>
|
||||
434 Tenney Drive<br>
|
||||
Rogue River, OR<br>
|
||||
97537<br>
|
||||
<a href="mailto:j.david.lowe@gmail.com">j.david.lowe@gmail.com</a><br>
|
||||
<a href="http://www.pootpoot.net/">http://www.pootpoot.net/</a></p>
|
||||
|
||||
<h2>Judges' comments:</h2>
|
||||
|
||||
<h3>To build:</h3>
|
||||
|
||||
<pre><code>make dlowe
|
||||
</code></pre>
|
||||
|
||||
<h3>To run:</h3>
|
||||
|
||||
<pre><code>./dlowe -<n_iterations> corpus1/ [...] corpus0/ < start.net > end.net
|
||||
|
||||
NOTE: The directory entries MUST end in a /
|
||||
|
||||
./dlowe file [file ...] < trained.net
|
||||
</code></pre>
|
||||
|
||||
<h3>Try:</h3>
|
||||
|
||||
Download the
|
||||
<a href="/2011/dlowe/dlowe-aux-data.tar.bz2">2011 dlowe entry dlowe-aux-data.tar.bz2</a>
|
||||
file and then:
|
||||
<pre><code>
|
||||
|
||||
tar -jxf dlowe-aux-data.tar.bz2
|
||||
|
||||
./dlowe dlowe.c < ioccc-winlose-trained.net
|
||||
./dlowe dlowe < ioccc-winlose-trained.net
|
||||
|
||||
./dlowe xor-0/00 < xor-trained.net
|
||||
./dlowe xor-0/11 < xor-trained.net
|
||||
./dlowe xor-1/01 < xor-trained.net
|
||||
./dlowe xor-1/10 < xor-trained.net
|
||||
|
||||
./dlowe hint.html < english-trained.net
|
||||
|
||||
./dlowe dlowe-aux-data.tar.bz2 < png-trained.net
|
||||
</code></pre>
|
||||
|
||||
<h3>Selected Judges Remarks:</h3>
|
||||
|
||||
<p>This entry is a ghoulish example of a brain (dead?) neural network classifier.
|
||||
It comes with a set of corpora for you to try.</p>
|
||||
|
||||
<h4>ioccc-winlose-trained.net</h4>
|
||||
|
||||
<p>You can create your own trained networks. For example, we trained a network
|
||||
on the C code of entries that were supplied to the 20Th IOCCC.</p>
|
||||
|
||||
<p>The ioccc-winlose-trained.net was trained using the earlystop.pl tool:</p>
|
||||
|
||||
<pre><code>rm -f ioccc-winlose-trained.net
|
||||
./earlystop.pl ioccc-winlose-trained.net ioccc_won_training/ ioccc_lost_training/ ioccc_won_test/ ioccc_lost_test/
|
||||
</code></pre>
|
||||
|
||||
<p>where:</p>
|
||||
|
||||
<pre><code>ioccc_won_training/
|
||||
1/2 of C code of the 20th IOCCC winners (except for dlowe.c from 2011)
|
||||
plus 1/2 of the C code winners from prior IOCCC contests
|
||||
|
||||
ioccc_won_test/
|
||||
1/2 of C code of the 20th IOCCC winners (except for dlowe.c from 2011)
|
||||
plus 1/2 of the C code winners from prior IOCCC contests
|
||||
|
||||
ioccc_lost_training/
|
||||
1/2 of C code from entries that that did not win
|
||||
|
||||
ioccc_lost_test/
|
||||
1/2 of C code from entries that that did not win
|
||||
|
||||
NOTE: The above directies were not shipped and the C code from
|
||||
entries that that did not win was flushed to /dev/null.
|
||||
</code></pre>
|
||||
|
||||
<p>The earlystop.pl tool wrote:</p>
|
||||
|
||||
<pre><code>training 1 to 1001...
|
||||
training 1001 to 2001...
|
||||
prior error = 56.746974766043; current error = 58.095691135305
|
||||
</code></pre>
|
||||
|
||||
<p>The resulting ioccc-winlose-trained.net file was included in the
|
||||
dlowe-aux-data.tar.bz2 file in the above mentioned URL.</p>
|
||||
|
||||
<p>The dlowe.c was explicitly excluded from this trailing set. So this test is interesting:</p>
|
||||
|
||||
<pre><code>./dlowe dlowe.c < ioccc-winlose-trained.net
|
||||
</code></pre>
|
||||
|
||||
<p>The match of dlowe.c to the lose/win trailed network was:</p>
|
||||
|
||||
<pre><code>dlowe.c 0.125108
|
||||
</code></pre>
|
||||
|
||||
<p>NOTE: The non-artificially intelligent decisions of the IOCCC judges include random
|
||||
quirks and their non-linear judgment calls not found in the ioccc trained network.
|
||||
Just because C code is or isn’t scored highly by this network does not
|
||||
mean it will win or lose a future IOCCC. On the other hand … it just might!</p>
|
||||
|
||||
<h4>other data sets to try</h4>
|
||||
|
||||
<p>While we cannot supply you with the losing IOCCC source code, the author did supply a number
|
||||
data sets on which to test:</p>
|
||||
|
||||
<p>We created the english-trained.net as follows:</p>
|
||||
|
||||
<pre><code>./dlowe -8000 english-1/ english-0/ < /dev/null > english-trained.net
|
||||
|
||||
english-0/
|
||||
Non-English (French) text
|
||||
english-1/
|
||||
English (non-French) text
|
||||
</code></pre>
|
||||
|
||||
<p>We created the png-trained.net as follows:</p>
|
||||
|
||||
<pre><code>./dlowe -8000 png-1/ png-0/ < /dev/null > png-trained.net
|
||||
|
||||
png-0/
|
||||
Non-png (gif) images
|
||||
png-1/
|
||||
png (non-gif) images
|
||||
</code></pre>
|
||||
|
||||
<p>We created the xor-trained.net as follows:</p>
|
||||
|
||||
<pre><code>./dlowe -8000 xor-1/ xor-0/ < /dev/null > xor-trained.net
|
||||
|
||||
xor-0/
|
||||
Data that XORs to 0
|
||||
xor-1/
|
||||
Data that XORs to 1
|
||||
</code></pre>
|
||||
|
||||
<h2>Author’s comments:</h2>
|
||||
|
||||
<h1>Synopsis:</h1>
|
||||
|
||||
<p>This is an artificially intelligent judging tool to help the IOCCC judges.
|
||||
Here’s to shorter, more frequent contests!</p>
|
||||
|
||||
<h1>Description:</h1>
|
||||
|
||||
<p>This is a multilayer perceptron (a feedforward artificial neural network)
|
||||
which can be trained, using on-line backpropagation, to classify input files.</p>
|
||||
|
||||
<p>It has a fixed topology of 2<sup>16</sup> input neurons, 6 hidden neurons and 1 output
|
||||
neuron.</p>
|
||||
|
||||
<p>The neurons' activation function is the logistic function 1 / (1 + e ^ -x).</p>
|
||||
|
||||
<h2>Classifying</h2>
|
||||
|
||||
<pre><code>./dlowe file [file ...] < trained.net
|
||||
</code></pre>
|
||||
|
||||
<p>To classify files, one specifies a trained network (on stdin) and one or more
|
||||
files to classify. The program will output one line per successfully-classified
|
||||
file to stderr, with the filename and the classification: a number between 0
|
||||
and 1.</p>
|
||||
|
||||
<p>The interpretation of the classification number depends on how the network was
|
||||
trained, but it’s geared toward interpretation as a <em>probability</em> or a
|
||||
<em>confidence</em>.</p>
|
||||
|
||||
<h2>Training</h2>
|
||||
|
||||
<pre><code>./dlowe -<n_iterations> corpus1/ [...] corpus0/ < start.net > end.net
|
||||
|
||||
NOTE: The directory args must end in a / for them to work.
|
||||
</code></pre>
|
||||
|
||||
<p>To train a network, one specifies a starting network (on stdin), two or more
|
||||
corpora (directories containing training data), and the number of training
|
||||
iterations to run. The program will write some progress data to stderr and,
|
||||
when it’s done, will serialize the updated network to stdout.</p>
|
||||
|
||||
<p>If no input network is given, a random new network will be generated as a
|
||||
starting point (i.e. provide an empty stdin).</p>
|
||||
|
||||
<p>The first corpus will be assigned a target value of 1. The last will be
|
||||
assigned a target value of 0. Intervening directories (if any) will be assigned
|
||||
intermediate target values.</p>
|
||||
|
||||
<p>The learning rate is hard-coded as 0.3. No momentum factor is used.</p>
|
||||
|
||||
<h3>png corpora</h3>
|
||||
|
||||
<p>The png-1 corpus was obtained by manually scraping the first results from an
|
||||
https://images.google.com search for “obfuscate filetype:png”.</p>
|
||||
|
||||
<p>The png-0 corpus was obtained by manually scraping the first results from an
|
||||
https://images.google.com search for “obfuscate filetype:gif”.</p>
|
||||
|
||||
<p>Results:</p>
|
||||
|
||||
<ul>
|
||||
<li>using these corpora as a training set</li>
|
||||
<li>using several hundred random <em>.gif and </em>.png files from my home computer as
|
||||
a test set</li>
|
||||
<li>using the included “earlystop.pl” script, which stopped after 67000 iterations.</li>
|
||||
<li>interpreting output of “> 0.5” as “probably a .png” and “< 0.5” as “probably
|
||||
a .gif”</li>
|
||||
<li>produced a network with about 87% accuracy</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>english corpora</h3>
|
||||
|
||||
<p>The english-1 corpus was obtained by manually scraping the first results from
|
||||
a https://www.google.com/webhp?lr=lang_en search for “paris filetype:txt”.</p>
|
||||
|
||||
<p>The english-0 corpus was obtained by manually scraping the first results from
|
||||
a https://www.google.com/webhp?lr=lang_fr search for “paris filetype:txt”.</p>
|
||||
|
||||
<p>Results:</p>
|
||||
|
||||
<ul>
|
||||
<li>using these corpora as a training set</li>
|
||||
<li>using several dozen additional text files (obtained by the same methods)
|
||||
as a test set</li>
|
||||
<li>using the included “earlystop.pl” script, which stopped after 10000
|
||||
iterations.</li>
|
||||
<li>interpreting output of “> 0.5” as “probably english” and “< 0.5” as
|
||||
“probably french”</li>
|
||||
<li>produced a network with 100% accuracy</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>xor corpora</h3>
|
||||
|
||||
<p>The xor-1 corpus consists of two files containing ‘01’ and ‘10’ respectively.</p>
|
||||
|
||||
<p>The xor-0 corpus consists of two files containing ‘00’ and ‘11’ respectively.</p>
|
||||
|
||||
<p>Results:</p>
|
||||
|
||||
<ul>
|
||||
<li>using these corpora as a training set</li>
|
||||
<li>takes about 8000 iterations to learn xor to within a tolerance of <0.01</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h1>Limitations</h1>
|
||||
|
||||
<p>The program can’t tell you anything meaningful about files with less than two
|
||||
bytes in them (I’m looking at you, smr.c!)</p>
|
||||
|
||||
<p>You must include the trailing directory separator on training directories
|
||||
(this allows the program to be portable without wasting precious bytes on
|
||||
figuring out how to concatenate directory and file names…)</p>
|
||||
|
||||
<p>Serialized network files are only portable between systems with the same
|
||||
floating-point representation and endianness.</p>
|
||||
|
||||
<p>Making sure not to overfit the network to the training data is a bit of a
|
||||
black art. I have enclosed ‘earlystop.pl’, a wrapper script that implements
|
||||
a simple ‘early stopping’ algorithm; other techniques are possible.</p>
|
||||
|
||||
<p>Bad input (e.g. nonexistent files, non-numeric number of iterations, etc.)
|
||||
tends to result in empty output.</p>
|
||||
|
||||
<p>Given exactly one corpus, the program will crash or produce garbage.</p>
|
||||
|
||||
<p>Leaks memory and file descriptors while processing files.</p>
|
||||
|
||||
<p>Will crash and die horribly if it runs out of memory.</p>
|
||||
|
||||
<p>The Microsoft C compiler doesn’t provide a dirent API, so to get this working
|
||||
on a Windows system you’ll need cygwin+gcc (tested) or a dirent compatibility
|
||||
library (untested, but they do exist).</p>
|
||||
|
||||
<p>Backpropagation doesn’t always converge: if you play with this long enough,
|
||||
you’ll eventually have a training session that completely fails to converge.</p>
|
||||
|
||||
<h1>Obfuscation:</h1>
|
||||
|
||||
<p>Zombies! (Since neural networks are modeled after BRAINS, ya know? And
|
||||
corpus sounds a lot like corpse. And I have 4- and 7-year-old kids ;)</p>
|
||||
|
||||
<p>Neural networks are interesting, and while the math isn’t terribly difficult,
|
||||
their behavior is difficult to fully understand.</p>
|
||||
|
||||
<p>Had some extra space in one of the major data structures, and it seemed a
|
||||
shame to waste it.</p>
|
||||
|
||||
<p>Similarly, I think three file pointers ought to be enough for anyone.</p>
|
||||
|
||||
<p>Lots of magic numbers expressed in various ways.</p>
|
||||
|
||||
<p>Random abuse of random C trivia.</p>
|
||||
|
||||
<p>Some textual changes were made to maximize the classification of this program
|
||||
by a network trained to recognize ioccc winners ;)</p>
|
||||
|
||||
<p>… but mostly zombies!</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<TABLE><TR>
|
||||
<TD><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a></TD>
|
||||
<TD><P>© Copyright 1984-2012,
|
||||
<A HREF="/judges.html">Leo Broukhis, Simon Cooper, Landon Curt Noll</A>
|
||||
- All rights reserved<BR>
|
||||
This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</P></TD>
|
||||
<TD> <!--<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" height="31" width="88"></a>--></TD>
|
||||
</TR></TABLE>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user