Neural network 如何在keras(非图像识别)上建立简单的神经网络

Neural network 如何在keras(非图像识别)上建立简单的神经网络,neural-network,keras,Neural Network,Keras,我是keras的新手,我正在尝试建立自己的神经网络 任务: 我需要写一个系统,可以为角色做出决定,这可能会遇到一个或多个敌人。可以知道该系统: 百分比健康特征 手枪的存在 敌人的数量 答案必须采用以下形式之一: 攻击 跑 隐藏(为了突然袭击) 无所事事 为了训练,我做了一张“课程表”: 这是我的代码: # Create first network with Keras from keras.models import Sequential from keras.layers import

我是keras的新手,我正在尝试建立自己的神经网络

任务:

我需要写一个系统,可以为角色做出决定,这可能会遇到一个或多个敌人。可以知道该系统:

  • 百分比健康特征
  • 手枪的存在
  • 敌人的数量
答案必须采用以下形式之一:

  • 攻击
  • 隐藏(为了突然袭击)
  • 无所事事
  • 为了训练,我做了一张“课程表”:

    这是我的代码:

    # Create first network with Keras
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.optimizers import SGD
    import numpy
    # fix random seed for reproducibility
    seed = 7
    numpy.random.seed(seed)
    # split into input (X) and output (Y) variables
    X = numpy.array([[0.5,1,1], [0.9,1,2], [0.8,0,1], [0.3,1,1], [0.6,1,2], [0.4,0,1], [0.9,1,7], [0.5,1,4], [0.1,0,1], [0.6,1,0], [1,0,0]])
    Y = numpy.array([[1],[1],[1],[2],[2],[2],[3],[3],[3],[4],[4]])
    # create model
    model = Sequential()
    model.add(Dense(3, input_dim=3, init='uniform', activation='relu'))
    model.add(Dense(1, init='uniform', activation='sigmoid'))
    # Compile model
    sgd = SGD(lr=0.001)
    model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])
    
    # Fit the model
    model.fit(X, Y, nb_epoch=150)
    # calculate predictions
    predictions = model.predict(X)
    # round predictions
    rounded = [round(x) for x in predictions]
    print(rounded)
    
    这是我得到的预测。 [1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]

    每个历元的精度为0.2727,损失减小。 这是不对的

    我试图将学习率降低10,改变激活和优化器。即使是我手动输入的数据。
    有人能告诉我如何解决我的简单问题吗。thx.

    您的代码中有几个问题

  • 与NN模型相比,数据项的数量非常少
  • Y表示为类编号,而不是类向量。在此基础上可以学习回归模型,但这是一个糟糕的设计选择
  • softmax
    功能的输出始终在0-1之间。。由于使用了此选项,您的模型只知道输出0-1之间的值
  • 下面是一个更好的修改代码:

    from keras.models import Sequential
    from keras.layers import Dense
    from keras.optimizers import SGD
    import numpy
    # fix random seed for reproducibility
    seed = 7
    numpy.random.seed(seed)
    # split into input (X) and output (Y) variables
    X = numpy.array([[0.5,1,1], [0.9,1,2], [0.8,0,1], [0.3,1,1], [0.6,1,2], [0.4,0,1], [0.9,1,7], [0.5,1,4], [0.1,0,1], [0.6,1,0], [1,0,0]])
    y = numpy.array([[1],[1],[1],[2],[2],[2],[3],[3],[3],[0],[0]])
    
    from keras.utils import np_utils
    Y = np_utils.to_categorical(y, 4)
    # print Y
    
    # create model
    model = Sequential()
    model.add(Dense(3, input_dim=3, activation='relu'))
    model.add(Dense(4, activation='softmax'))
    # Compile model
    # sgd = SGD(lr=0.1)
    # model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
    model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
    
    # Fit the model
    model.fit(X, Y, nb_epoch=700)
    
    # calculate predictions
    predictions = model.predict(X)
    
    predictions_class = predictions.argmax(axis=-1)
    print(predictions_class)
    
    注意:我使用了
    softmax
    激活,因为类是互斥的