我正在尝试编写我的第一个神经网络来玩游戏连接四。我使用 Java 和 deeplearning4j。我试图实现一个遗传算法,但是当我训练网络一段时间时,网络的输出跳到 NaN,我无法说出我在哪里搞砸了如此严重的事情。我将发布所有 3 个类下面,其中 Game 是游戏逻辑和规则,VGFrame 是 UI,Main 是所有 nn 的东西。
我有一个由 35 个神经网络组成的池,每次迭代我都会让最好的 5 个存活并繁殖,并稍微随机化新创建的神经网络。为了评估网络,我让他们互相争斗,然后给胜者加分,之后输给分数。由于我将一块石头放入已经满的列中,我希望神经网络至少能够在一段时间后按照规则玩游戏,但他们不能这样做。我用谷歌搜索了 NaN 问题,它似乎是一个梯度梯度问题,但据我所知,这不应该发生在遗传算法中?我可以在哪里查找错误或我的实现通常有什么问题的任何想法?
主要的
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.DenseLayer;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.lossfunctions.LossFunctions.LossFunction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.learning.config.Nesterovs;
public class Main {
final int numRows = 7;
final int numColums = 6;
final int randSeed = 123;
MultiLayerNetwork[] models;
static …
Run Code Online (Sandbox Code Playgroud)