将像这个人发布的这种神经网络算法导出为CoreML模型,这可能吗?
from numpy import exp, array, random, dot
class NeuralNetwork(): def __init__(self): # 设置随机数生成器的种子,以便每次程序运行时生成相同的数字。 random.seed(1) # 我们模拟一个单一的神经元,具有3个输入连接和1个输出连接。 # 我们为3 x 1矩阵分配随机权重,值范围在-1到1之间,均值为0。 self.synaptic_weights = 2 * random.random((3, 1)) - 1 # Sigmoid函数,描述一个S形曲线。 # 我们通过这个函数传递输入的加权和,以将其标准化在0和1之间。 def __sigmoid(self, x): return 1 / (1 + exp(-x)) # Sigmoid函数的导数。 # 这是Sigmoid曲线的梯度。 # 它表明我们对现有权重的信心程度。 def __sigmoid_derivative(self, x): return x * (1 - x) # 我们通过试错过程来训练神经网络。 # 每次调整突触权重。 def train(self, training_set_inputs, training_set_outputs, number_of_training_iterations): for iteration in xrange(number_of_training_iterations): # 将训练集通过我们的神经网络(单个神经元)传递。 output = self.think(training_set_inputs) # 计算误差(期望输出与预测输出之间的差异)。 error = training_set_outputs - output # 将误差乘以输入,再次乘以Sigmoid曲线的梯度。 # 这意味着信心较低的权重会被更多地调整。 # 这意味着为零的输入不会导致权重变化。 adjustment = dot(training_set_inputs.T, error * self.__sigmoid_derivative(output)) # 调整权重。 self.synaptic_weights += adjustment # 神经网络进行思考。 def think(self, inputs): # 将输入通过我们的神经网络(我们的单个神经元)传递。 return self.__sigmoid(dot(inputs, self.synaptic_weights))if __name__ == "__main__": # 初始化一个单神经元神经网络。 neural_network = NeuralNetwork() print "随机初始突触权重: " print neural_network.synaptic_weights # 训练集。我们有4个示例,每个示例包含3个输入值和1个输出值。 training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) training_set_outputs = array([[0, 1, 1, 0]]).T # 使用训练集训练神经网络。 # 进行10,000次训练,每次进行小的调整。 neural_network.train(training_set_inputs, training_set_outputs, 10000) print "训练后的新突触权重: " print neural_network.synaptic_weights # 使用新的情况测试神经网络。 print "考虑新情况 [1, 0, 0] -> ?: " print neural_network.think(array([1, 0, 0]))
应该做些什么?
回答:
是的,这是可能的。你可以使用coremltools中的NeuralNetworkBuilder
类来实现这一点。