| 70 | } |
| 71 | |
| 72 | struct ggml_tensor * randomize_tensor_normal(struct ggml_tensor * tensor, struct random_normal_distribution * rnd) { |
| 73 | float scale = 1.0f; // xavier |
| 74 | switch (tensor->n_dims) { |
| 75 | case 1: |
| 76 | scale /= sqrtf((float) tensor->ne[0]); |
| 77 | for (int i0 = 0; i0 < tensor->ne[0]; i0++) { |
| 78 | float * dst = (float *) ((char *) tensor->data + i0*tensor->nb[0]); |
| 79 | *dst = scale * frand_normal(rnd); |
| 80 | } |
| 81 | break; |
| 82 | case 2: |
| 83 | scale /= sqrtf((float) tensor->ne[0]+tensor->ne[1]); |
| 84 | for (int i1 = 0; i1 < tensor->ne[1]; i1++) { |
| 85 | for (int i0 = 0; i0 < tensor->ne[0]; i0++) { |
| 86 | float * dst = (float *) ((char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1]); |
| 87 | *dst = scale * frand_normal(rnd); |
| 88 | } |
| 89 | } |
| 90 | break; |
| 91 | case 3: |
| 92 | scale /= sqrtf((float) tensor->ne[0]+tensor->ne[1]); |
| 93 | for (int i2 = 0; i2 < tensor->ne[2]; i2++) { |
| 94 | for (int i1 = 0; i1 < tensor->ne[1]; i1++) { |
| 95 | for (int i0 = 0; i0 < tensor->ne[0]; i0++) { |
| 96 | float * dst = (float *) ((char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2]); |
| 97 | *dst = scale * frand_normal(rnd); |
| 98 | } |
| 99 | } |
| 100 | } |
| 101 | break; |
| 102 | case 4: |
| 103 | scale /= sqrtf((float) tensor->ne[0]+tensor->ne[1]); |
| 104 | for (int i3 = 0; i3 < tensor->ne[3]; i3++) { |
| 105 | for (int i2 = 0; i2 < tensor->ne[2]; i2++) { |
| 106 | for (int i1 = 0; i1 < tensor->ne[1]; i1++) { |
| 107 | for (int i0 = 0; i0 < tensor->ne[0]; i0++) { |
| 108 | float * dst = (float *) ((char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3]); |
| 109 | *dst = scale * frand_normal(rnd); |
| 110 | } |
| 111 | } |
| 112 | } |
| 113 | } |
| 114 | break; |
| 115 | default: |
| 116 | die("Unsupported tensor->n_dims"); |
| 117 | }; |
| 118 | return tensor; |
| 119 | } |
| 120 | |
| 121 | struct ggml_tensor * randomize_tensor_uniform(struct ggml_tensor * tensor, struct random_uniform_distribution * rnd) { |
| 122 | switch (tensor->n_dims) { |
no test coverage detected