@@ -7,7 +7,7 @@ const numParameters = 4;
77const imageSize = 8 ;
88// Number of images to use when training the neural network
99const numTrainingImages = 1 ;
10- const logData = false ;
10+ const logData = true ;
1111const optimizer = {
1212"generator" : tf . train . adam ( 0.001 ) ,
1313"discriminator" : tf . train . sgd ( 0.001 )
@@ -223,8 +223,8 @@ trainingData.images[trainingData.images.length - 1].onload = function () {
223223generateTrainingData ( ) ;
224224}
225225
226- generatorLoss = generator . calculateLoss ( ) ;
227- discriminatorLoss = discriminator . calculateLoss ( ) ;
226+ const generatorLoss = generator . calculateLoss ( ) ;
227+ const discriminatorLoss = discriminator . calculateLoss ( ) ;
228228
229229if ( logData ) {
230230console . log ( "Iteration " + iteration ) ;
@@ -245,16 +245,11 @@ trainingData.images[trainingData.images.length - 1].onload = function () {
245245}
246246document . querySelector ( "#iteration" ) . innerHTML = "Iteration • " + iteration ;
247247document . querySelector ( "#generator-loss" ) . innerHTML = "Generator • " +
248- generatorLoss .
249- dataSync ( ) [ 0 ] .
250- toFixed ( 2 ) ;
248+ generatorLoss
249+ . dataSync ( ) [ 0 ] ;
251250document . querySelector ( "#discriminator-loss" ) . innerHTML = "Discriminator • " +
252- discriminatorLoss .
253- dataSync ( ) [ 0 ] .
254- toFixed ( 2 ) ;
255-
256- generatorLoss . dispose ( ) ;
257- discriminatorLoss . dispose ( ) ;
251+ discriminatorLoss
252+ . dataSync ( ) [ 0 ] ;
258253
259254const trainableVars = [ ] ;
260255for ( var i = 0 ; i < generator . model . weights . length ; i ++ ) {
@@ -263,12 +258,24 @@ trainingData.images[trainingData.images.length - 1].onload = function () {
263258for ( var i = 0 ; i < generator . model . model . weights . length ; i ++ ) {
264259trainableVars . push ( generator . model . model . weights [ i ] . val ) ;
265260}
261+ // if (generatorLoss > discriminatorLoss) {
266262generator . optimizer . minimize (
267263generator . calculateLoss ,
268264false ,
269265trainableVars
270266) ;
271267// }
268+ // else {
269+ discriminator . optimizer . minimize ( discriminator . calculateLoss ) ;
270+ // }
271+
272+ // if (discriminatorLoss < 0.05) {
273+ // generator.optimizer.minimize(generator.calculateLoss);
274+ // }
275+ // discriminator.optimizer.minimize(discriminator.calculateLoss);
276+
277+ generatorLoss . dispose ( ) ;
278+ discriminatorLoss . dispose ( ) ;
272279
273280// All this is just display code
274281// Calculate autoencoder output from original image
@@ -280,6 +287,7 @@ trainingData.images[trainingData.images.length - 1].onload = function () {
280287return generator . model . predict ( parameters . display )
281288// Clip pixel values to a 0 - 255 (int32) range
282289// Reshape the output tensor into an image format (W * L * 3)
290+ . clipByValue ( 0 , 255 )
283291. reshape (
284292[ imageSize , imageSize , 1 ]
285293)
@@ -291,21 +299,21 @@ trainingData.images[trainingData.images.length - 1].onload = function () {
291299tf . tidy (
292300( ) => {
293301return discriminator . model . predict (
294- generator . model . predict ( parameters . display ) . clipByValue ( 0 , 255 )
302+ generator . model . predict ( parameters . display )
295303) ;
296304}
297305) ;
298306
299307if ( logData ) {
300308console . log ( "Generator output" ) ;
301- output . print ( ) ;
309+ // output.print();
302310
303311console . log ( "Discriminator output" ) ;
304312discriminatorOutput . print ( ) ;
305313}
306314
307315// Display the output tensor on the output canvas, then dispose the tensor
308- tf . toPixels ( output . clipByValue ( 0 , 255 ) , canvas . generated ) . then ( ( ) => output . dispose ( ) ) ;
316+ tf . toPixels ( output , canvas . generated ) . then ( ( ) => output . dispose ( ) ) ;
309317discriminatorOutput . dispose ( ) ;
310318
311319iteration ++ ;
0 commit comments