Livt packages

Livt.ML

Version 1.6.1

Fixed-size quantized inference, tensor storage, attention, and transformer building blocks for Livt.

Published files (132)

src/activation/SigmoidLUT.lvt

namespace Livt.ML.Activation

/**
 * Looks up a sigmoid approximation scaled to the range 0 through 255.
 */
component SigmoidLUT
{
	// Number of entries in the integer sigmoid lookup table.
	const LUT_SIZE: int = 256

	// Owned approximation table in the component numeric scale.
	lut: int[256]

	/**
	 * Initializes the 256-entry sigmoid lookup table.
	 */
	new()
	{
		lut[0] = 0
		lut[1] = 0
		lut[2] = 0
		lut[3] = 0
		lut[4] = 0
		lut[5] = 0
		lut[6] = 0
		lut[7] = 0
		lut[8] = 0
		lut[9] = 0
		lut[10] = 0
		lut[11] = 0
		lut[12] = 0
		lut[13] = 0
		lut[14] = 0
		lut[15] = 0
		lut[16] = 0
		lut[17] = 0
		lut[18] = 0
		lut[19] = 0
		lut[20] = 0
		lut[21] = 0
		lut[22] = 0
		lut[23] = 0
		lut[24] = 0
		lut[25] = 0
		lut[26] = 0
		lut[27] = 0
		lut[28] = 0
		lut[29] = 1
		lut[30] = 1
		lut[31] = 1
		lut[32] = 1
		lut[33] = 1
		lut[34] = 1
		lut[35] = 1
		lut[36] = 1
		lut[37] = 1
		lut[38] = 1
		lut[39] = 1
		lut[40] = 1
		lut[41] = 1
		lut[42] = 1
		lut[43] = 1
		lut[44] = 1
		lut[45] = 1
		lut[46] = 2
		lut[47] = 2
		lut[48] = 2
		lut[49] = 2
		lut[50] = 2
		lut[51] = 2
		lut[52] = 2
		lut[53] = 2
		lut[54] = 2
		lut[55] = 3
		lut[56] = 3
		lut[57] = 3
		lut[58] = 3
		lut[59] = 3
		lut[60] = 4
		lut[61] = 4
		lut[62] = 4
		lut[63] = 4
		lut[64] = 5
		lut[65] = 5
		lut[66] = 5
		lut[67] = 6
		lut[68] = 6
		lut[69] = 6
		lut[70] = 7
		lut[71] = 7
		lut[72] = 7
		lut[73] = 8
		lut[74] = 8
		lut[75] = 9
		lut[76] = 10
		lut[77] = 10
		lut[78] = 11
		lut[79] = 11
		lut[80] = 12
		lut[81] = 13
		lut[82] = 14
		lut[83] = 14
		lut[84] = 15
		lut[85] = 16
		lut[86] = 17
		lut[87] = 18
		lut[88] = 19
		lut[89] = 20
		lut[90] = 22
		lut[91] = 23
		lut[92] = 24
		lut[93] = 26
		lut[94] = 27
		lut[95] = 29
		lut[96] = 30
		lut[97] = 32
		lut[98] = 34
		lut[99] = 36
		lut[100] = 38
		lut[101] = 40
		lut[102] = 42
		lut[103] = 44
		lut[104] = 47
		lut[105] = 49
		lut[106] = 51
		lut[107] = 54
		lut[108] = 57
		lut[109] = 60
		lut[110] = 62
		lut[111] = 65
		lut[112] = 69
		lut[113] = 72
		lut[114] = 75
		lut[115] = 78
		lut[116] = 82
		lut[117] = 85
		lut[118] = 89
		lut[119] = 93
		lut[120] = 96
		lut[121] = 100
		lut[122] = 104
		lut[123] = 108
		lut[124] = 112
		lut[125] = 116
		lut[126] = 120
		lut[127] = 124
		lut[128] = 128
		lut[129] = 131
		lut[130] = 135
		lut[131] = 139
		lut[132] = 143
		lut[133] = 147
		lut[134] = 151
		lut[135] = 155
		lut[136] = 159
		lut[137] = 162
		lut[138] = 166
		lut[139] = 170
		lut[140] = 173
		lut[141] = 177
		lut[142] = 180
		lut[143] = 183
		lut[144] = 186
		lut[145] = 190
		lut[146] = 193
		lut[147] = 195
		lut[148] = 198
		lut[149] = 201
		lut[150] = 204
		lut[151] = 206
		lut[152] = 208
		lut[153] = 211
		lut[154] = 213
		lut[155] = 215
		lut[156] = 217
		lut[157] = 219
		lut[158] = 221
		lut[159] = 223
		lut[160] = 225
		lut[161] = 226
		lut[162] = 228
		lut[163] = 229
		lut[164] = 231
		lut[165] = 232
		lut[166] = 233
		lut[167] = 235
		lut[168] = 236
		lut[169] = 237
		lut[170] = 238
		lut[171] = 239
		lut[172] = 240
		lut[173] = 241
		lut[174] = 241
		lut[175] = 242
		lut[176] = 243
		lut[177] = 244
		lut[178] = 244
		lut[179] = 245
		lut[180] = 245
		lut[181] = 246
		lut[182] = 247
		lut[183] = 247
		lut[184] = 248
		lut[185] = 248
		lut[186] = 248
		lut[187] = 249
		lut[188] = 249
		lut[189] = 249
		lut[190] = 250
		lut[191] = 250
		lut[192] = 250
		lut[193] = 251
		lut[194] = 251
		lut[195] = 251
		lut[196] = 251
		lut[197] = 252
		lut[198] = 252
		lut[199] = 252
		lut[200] = 252
		lut[201] = 252
		lut[202] = 253
		lut[203] = 253
		lut[204] = 253
		lut[205] = 253
		lut[206] = 253
		lut[207] = 253
		lut[208] = 253
		lut[209] = 253
		lut[210] = 253
		lut[211] = 254
		lut[212] = 254
		lut[213] = 254
		lut[214] = 254
		lut[215] = 254
		lut[216] = 254
		lut[217] = 254
		lut[218] = 254
		lut[219] = 254
		lut[220] = 254
		lut[221] = 254
		lut[222] = 254
		lut[223] = 254
		lut[224] = 254
		lut[225] = 254
		lut[226] = 254
		lut[227] = 254
		lut[228] = 255
		lut[229] = 255
		lut[230] = 255
		lut[231] = 255
		lut[232] = 255
		lut[233] = 255
		lut[234] = 255
		lut[235] = 255
		lut[236] = 255
		lut[237] = 255
		lut[238] = 255
		lut[239] = 255
		lut[240] = 255
		lut[241] = 255
		lut[242] = 255
		lut[243] = 255
		lut[244] = 255
		lut[245] = 255
		lut[246] = 255
		lut[247] = 255
		lut[248] = 255
		lut[249] = 255
		lut[250] = 255
		lut[251] = 255
		lut[252] = 255
		lut[253] = 255
		lut[254] = 255
		lut[255] = 255
	}

	/**
	 * Returns the clamped sigmoid-table value for input.
	 */
	public fn Apply(input: int) int
	{
		var index = input

		if (index < 0) {
			index = 0
		}

		if (index > 255) {
			index = 255
		}

		return lut[index]
	}
}