基于神经元分析手牌

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 17 20:13:37 2020

@author: ASUS
"""

# load the file

import numpy as np 
import scipy.special
class neuralNetwork:
    def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate):
        self.inodes=inputnodes
        self.hnodes=hiddennodes
        self.onodes=outputnodes
        self.lr=learningrate
        #link weight 
        self.wih=np.random.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes))
        self.who=np.random.normal(0.0,pow(self.hnodes,-0.5),(self.onodes,self.hnodes))
        #activation function
        self.activation_function=lambda x: scipy.special.expit(x)
        pass
    def train(self,input_list,target_list):
        # convert inputs list to 2d array
        inputs=np.array(input_list,ndmin=2).T 
        targets=np.array(target_list,ndmin=2).T 
        #calculate signals into hidden layer
        hidden_inputs=np.dot(self.wih,inputs)
        hidden_output=self.activation_function(hidden_inputs)
        #calculate signals into final layer
        final_inputs=np.dot(self.who,hidden_output)
        final_outputs=self.activation_function(final_inputs)
        # the error
        output_errors=targets-final_outputs
        #hidden layer error is the output_errors,split by weights recombined at hidden nodes
        hidden_errors=np.dot(self.who.T,output_errors)
        # update the weights for the links between the hidden and output layers
        self.who+=self.lr*np.dot((output_errors*final_outputs*(1.0-final_outputs)),np.transpose(hidden_output))
        self.wih+=self.lr*np.dot((hidden_errors*hidden_output*(1.0-hidden_output)),np.transpose(inputs))
        pass
    def query(self,input_list):
        #convert inputs list to 2d array
        inputs=np.array(input_list,ndmin=2).T 
        #calculate signals into hidden layer
        hidden_inputs=np.dot(self.wih,inputs)
        hidden_output=self.activation_function(hidden_inputs)
        #calculate signals into out layer
        final_inputs=np.dot(self.who,hidden_output)
        final_outputs=self.activation_function(final_inputs)
        return final_outputs
        
input_nodes=17
hidden_nodes=100
output_nodes=2
learning_rate=0.3
    # create instance of neural network
n=neuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate)
    # load the mnist training data csv file into list
training_data_file=open('C:\\Users\\ASUS\\test.csv','r')
training_data_list=training_data_file.readlines()
training_data_file.close()
# train the nerual network
# go through all records in the training data set

for record in  training_data_list:
    #split the record by the ',' commas
    all_values=record.split(',')
    all_values = list(map(int, all_values))#需要对导入数据转换数值类型
    #scale and shift the inputs
    inputs=(np.asfarray(all_values[1:])/15*0.99)+0.01
    #creat the target output values
    targets=all_values[0]
    n.train(inputs,targets)
    pass

这是一个单个隐藏层的神经元网络

训练文件的格式为18位数组,首位表示输赢,后17位表示手牌状态

猜你喜欢

转载自www.cnblogs.com/yuvejxke/p/12725465.html
今日推荐