MCPcopy Create free account
hub / github.com/JunlingWang/Neuronetwork_with_python / Network

Class Network

your_first_network.py:122–245  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

120#-----------------------------------------------------------------
121#定义一个网络类
122class Network:
123 def __init__(self, network_shape):
124 self.shape = network_shape
125 self.layers = []
126 for i in range(len(network_shape)-1):
127 layer = Layer(network_shape[i], network_shape[i+1])
128 self.layers.append(layer)
129
130 #前馈运算函数
131 def network_forward(self, inputs):
132 outputs = [inputs]
133 for i in range(len(self.layers)):
134 layer_sum = self.layers[i].layer_forward(outputs[i])
135 if i < len(self.layers)-1:
136 layer_output = activation_ReLU(layer_sum)
137 layer_output = normalize(layer_output)
138 else:
139 layer_output = activation_softmax(layer_sum)
140 outputs.append(layer_output)
141 return outputs
142
143 #反向传播函数
144 def network_backward(self, layer_outputs, target_vector):
145 backup_network = copy.deepcopy(self) # 备用网络
146 preAct_demands = get_final_layer_preAct_damands(layer_outputs[-1], target_vector)
147 for i in range(len(self.layers)):
148 layer = backup_network.layers[len(self.layers) - (1+i)] # 倒序
149 if i != 0:
150 layer.biases += LEARNING_RATE * np.mean(preAct_demands, axis=0)
151 layer.biases = vector_normalize(layer.biases)
152
153 outputs = layer_outputs[len(layer_outputs) - (2+i)]
154 results_list = layer.layer_backward(outputs, preAct_demands)
155 preAct_demands = results_list[0]
156 weights_adjust_matrix = results_list[1]
157 layer.weights += LEARNING_RATE * weights_adjust_matrix
158 layer.weights = normalize(layer.weights)
159 return backup_network
160
161 #单批次训练
162 def one_batch_train(self, batch):
163 global force_train, random_train, n_improved, n_not_improved
164
165 inputs = batch[:,(0, 1)]
166 targets = copy.deepcopy(batch[:, 2]).astype(int) # 标准答案
167 outputs = self.network_forward(inputs)
168 precise_loss = precise_loss_function(outputs[-1], targets)
169 loss = loss_function(outputs[-1], targets)
170
171 if np.mean(loss) <= LOSS_THRESHOLD:#损失函数小于这个值就不需要训练了
172 print('No need for training')
173 else:
174 backup_network = self.network_backward(outputs, targets)
175 backup_outputs = backup_network.network_forward(inputs)
176 backup_precise_loss = precise_loss_function(backup_outputs[-1], targets)
177 backup_loss = loss_function(backup_outputs[-1], targets)
178
179 if np.mean(precise_loss) >= np.mean(backup_precise_loss) or np.mean(loss) >= np.mean(backup_loss):

Callers 2

random_updateMethod · 0.85
mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected