V1.0
This commit is contained in:
+8
-7
@@ -10,12 +10,12 @@ layout(std430, binding = 4) buffer Targets { float T[]; };
|
||||
|
||||
layout(push_constant) uniform Params {
|
||||
uint mode; // 0: FF, 1: OutError, 2: BackProp, 3: Update
|
||||
uint prevSize;
|
||||
uint nextSize;
|
||||
uint prevSize; // Суммарный размер всех входных слоев
|
||||
uint nextSize; // Размер текущего слоя
|
||||
uint wOff;
|
||||
uint bOff;
|
||||
uint oOff;
|
||||
uint nextOOff;
|
||||
uint oOff; // Смещение первого входного слоя
|
||||
uint nextOOff; // Смещение текущего слоя
|
||||
float lr;
|
||||
} p;
|
||||
|
||||
@@ -35,24 +35,25 @@ void main() {
|
||||
O[p.nextOOff + idx] = sigmoid(sum);
|
||||
}
|
||||
}
|
||||
// MODE 1: Ошибка выходного слоя
|
||||
// MODE 1: Ошибка выходного слоя (MSE derivative)
|
||||
else if (p.mode == 1) {
|
||||
if (idx < p.nextSize) {
|
||||
float outVal = O[p.nextOOff + idx];
|
||||
E[p.nextOOff + idx] = (T[idx] - outVal) * dSigmoid(outVal);
|
||||
}
|
||||
}
|
||||
// MODE 2: Обратное распространение ошибки (Hidden layers)
|
||||
// MODE 2: Обратное распространение ошибки (Error propagation)
|
||||
else if (p.mode == 2) {
|
||||
if (idx < p.prevSize) {
|
||||
float errSum = 0.0;
|
||||
for (uint i = 0; i < p.nextSize; i++) {
|
||||
errSum += E[p.nextOOff + i] * W[p.wOff + i * p.prevSize + idx];
|
||||
}
|
||||
// Ошибка записывается в Errors входного слоя
|
||||
E[p.oOff + idx] = errSum * dSigmoid(O[p.oOff + idx]);
|
||||
}
|
||||
}
|
||||
// MODE 3: Обновление весов и смещений
|
||||
// MODE 3: Обновление весов и смещений (Gradient Descent)
|
||||
else if (p.mode == 3) {
|
||||
if (idx < p.nextSize) {
|
||||
float errTerm = E[p.nextOOff + idx] * p.lr;
|
||||
|
||||
Reference in New Issue
Block a user