Skip to content

Instantly share code, notes, and snippets.

@SoulFireMage
Last active April 13, 2023 13:56
Show Gist options
  • Save SoulFireMage/7a7e87c1792e10e8346e4de6a1c447bf to your computer and use it in GitHub Desktop.
Save SoulFireMage/7a7e87c1792e10e8346e4de6a1c447bf to your computer and use it in GitHub Desktop.
Tensor flow to output 1
This code generates a sequence of random numbers and applies a transformation to each number,
such that the probability of the number being transformed to 1 increases as the sequence progresses.
This is done using a Markov chain with a transition matrix that depends on the sequence index.
```csharp
// Install TensorFlow.NET NuGet package
#load "nuget: TensorFlow.NET, 0.11.0"
using System;
using System.Collections.Generic;
using System.Linq;
using TensorFlow;
using static TensorFlow.Binding;
void Main()
{
// Generate a sequence of random numbers
var sequenceLength = 10;
var sequence = Enumerable.Range(0, sequenceLength).Select(_ => RandomNumber()).ToArray();
// Build the model
var input = tf.keras.layers.Input(shape: 1);
var dense = tf.keras.layers.Dense(units: 8, activation: "relu").Apply(input);
var transformer = tf.keras.layers.TransformerBlock(num_heads: 2, d_model: 8, dense_activation: "relu").Apply(dense);
var output = tf.keras.layers.Dense(units: 1, activation: "sigmoid").Apply(transformer);
var model = tf.keras.Model(input, output);
model.Compile(optimizer: "adam", loss: "binary_crossentropy", metrics: new[] { "accuracy" });
// Perform Markov simulation over the sequence
var currentState = sequence[0];
for (var i = 1; i < sequence.Length; i++)
{
// Compute the transition matrix based on the current sequence index
var transitionMatrix = GetTransitionMatrix(i);
// Apply the transformation to the current state
currentState = ApplyTransformation(currentState, transitionMatrix, model);
// Print the current state
Console.WriteLine($"Current state: {currentState}");
}
}
// Generates a random number between 0 and 1
double RandomNumber() => new Random().NextDouble();
// Computes the transition matrix for a given sequence index
double[,] GetTransitionMatrix(int index)
{
var transitionMatrix = new double[,]
{
{ 0.9, 0.1 },
{ 0.1, 0.9 }
};
var transitionProbability = 0.1 + index * 0.1;
var transitionMatrixScaled = new double[,]
{
{ 1 - transitionProbability, transitionProbability },
{ transitionProbability, 1 - transitionProbability }
};
return transitionMatrixScaled.Dot(transitionMatrix);
}
// Applies the transformation to a given state using the given model
double ApplyTransformation(double state, double[,] transitionMatrix, tf.keras.Model model)
{
// Compute the probability of transitioning to 1
var inputTensor = new double[][] { new[] { state } }.ToTensor();
var probability1 = model.Predict(inputTensor)[0][0];
// Apply the transition matrix to the probabilities
var probabilities = new double[] { probability1, 1 - probability1 };
var probabilitiesTransformed = transitionMatrix.Dot(probabilities);
// Choose the new state based on the transformed probabilities
var newState = probabilitiesTransformed[0] > RandomNumber() ? 1.0 : 0.0;
return newState;
}
```
This code defines a transformer-based neural network and applies it to a Markov simulation over a sequence of random numbers.
The Markov simulation generates a sequence of states by applying a transformation to each state using the given model.
The transformation probability depends on the current state and the current sequence index.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment