blob: 8fdf6dabdedde647a67fb0fdbd35a27a5c4ee99f [file] [log] [blame] [edit]
import math
import numpy as np
# Data size variables
layer_counts = [2, 4]
char_counts = [1024, 4096]
text_input = "lstm_full.txt"
# Read from the full text file
def read_full_text(fn, char_count):
full_text_file = open(text_input, encoding="utf8")
full_text = full_text_file.read(char_count)
full_text_file.close()
return full_text
def get_char_bits(text):
return math.ceil(math.log2(max([ord(c) for c in text])))
def text_to_matrix(text, bits):
# bits = math.ceil(math.log2(max([ord(c) for c in text])))
return np.array(list(map(lambda c: list(map(lambda b: int(b), bin(ord(c))[2:].zfill(bits))), text)))
def f_write_mat(fid, matrix):
for row in matrix:
fid.write(" ".join([str(n) for n in row]))
fid.write("\n")
fid.write("\n")
# Read in all text data
full_text = read_full_text(text_input, max(char_counts))
# Loop through each size
for layer_count in layer_counts:
for char_count in char_counts:
# Get text extract
use_text = full_text[: char_count]
char_bits = get_char_bits(use_text)
text_mat = text_to_matrix(use_text, char_bits)
# Randomly generate past state, and parameters
state = np.random.random((2 * layer_count, char_bits))
main_params = np.random.random((2 * layer_count, char_bits * 4))
extra_params = np.random.random((3, char_bits))
# Write to file
f = open(f"lstm_l{layer_count}_c{char_count}.txt", "w")
f.write(f"{layer_count} {char_count} {char_bits}\n\n")
f_write_mat(f, main_params)
f_write_mat(f, extra_params)
f_write_mat(f, state)
f_write_mat(f, text_mat)
f.write("\n")
f.close()