python神经网络训练完了怎么输入得到结果_python神经网络读书笔记

机器学习是目前最流形的话题,为了不落后时代,开始读书。

Tariq Rashid, Make your own neutral network

我们每天都会做很多的决定,比如早晨穿什么衣服,中午吃什么饭,晚上看什么电影,睡觉的时候是侧身睡还是仰面睡。对于天秤座的人而言,每样决定都会耗费太多的精力和时间。那么,世界上有没有一种机器,只需要输入一些东西后,来替你做出决定呢。得益于这个AI技术的发展,正逐步得以实现。AI通过一些指令集,称为算法,来实现我们想要的这种机器。其中一种算法叫做神经网络。

首先,先抽象化一下我们的问题。

我们想把一些数据输入到一个黑箱内,它经过运算后,输出结果。输入和输出不难理解,中间到底做了什么事情,能够把我们的输入变成了有意义的输出呢?

下面开始类比一下,生物是如何得到输入后,开始输出的。

设想一个场景:一位屌丝码农睡眼惺忪的去挤公交车上班,刚到车站,突然旁边飘过一阵异香,紧接着他顺着香味飘来的方向,发现一个身材高挑的长发女子,对他回眸一笑。他忍不住走向前去,对美女说:“能加个微信吗?”

现在我们来分析这个场景,对码农这个智能人来说什么是输入呢?输入有气味,这属于味觉的,还有属于视觉的:身材,容貌和衣着。这些输入经过码农身体做了一番事情后,产生了输出,这个输出就是前去搭讪。对这个过程的输入输出我们都很了解,但是连接两者的码农身体到底发生了什么事情,使得码农产生了搭讪的动作,这是我们想要知道的。

生物能够对各种刺激和场景做出反应,得益于身体内有强大的神经网络。组成神经网络的单位是神经元。

下图是一个神经元

一个神经元(neuron)包括三个部分树突(dendrite),轴突(axon)和末梢(terminals)。三者有不同的功能,其中树突接受到刺激后会产生电流,轴突负责把电流传导到末梢,末梢连接其他的神经元。最终的末梢连接到各个组织器官,产生相应动作。

比如码农闻到香味,并看到美女后,各种感官的输入,使得树突产生电流,由轴突传导到周围神经元,最终到达腿部肌肉和语言中枢,产生走向前去,并且搭讪的动作。

那么,生物能够完成复杂的任务,体内应该有多少神经元呢?据统计,果蝇体内有十万个神经元,就可以使它能够完成,飞行,捕食,躲避危险等复杂的任务。人类体内的神经元更多,人的脑子大概拥有一亿个神经元。

现在计算机不可能真正复现人脑的功能。所以只能将神经网络进行抽象和简化,用简单的模型去描述这个复杂的网络。这个模型必须有输入,有输出,必须有传递。抽象如下图。

一个神经元被抽象为一个节点,输入电流就是输入一个数字。为了使网络复杂,把网络进行分层。第一层称为输入层,最后一层称为输出层,中间称为隐藏层。

从一个节点传播到另一个节点,不是原封不动的传播,而是有权重分配。比如第一层的节点1可以传播到第二层的节点1,2,3,传入的数量并不是平均分配的。这个很好理解,比如看一个人,有人喜欢好看的皮囊,有人喜欢有趣的灵魂。那么不同的人在皮囊和灵魂上给与的权重是不同的。

另外在接受信号时也不是原封不动的接受,接受前要经过一个函数的考验。我想,并不是每个人都像前述码农一样,见到美女都要搭讪的。就像好声音上的导师,不是对每个上台的人都会转身。这是因为神经元对信号有大小的要求,只有在信号达到一定数值后才会产生冲动,这个大小称为阈值。好声音的导师,面目狰狞,异常纠结,并没有转身的时候,信号接近阈值,一旦突破阈值,才会转身----I WANT YOU!可能上述码农的神经元的阈值比较低,见个美女都想说-I WANT YOU!

接下来,就是数学了,下次再说吧。剧透一下:

从输入到输出过程中的运算,就是熟悉的矩阵运算。

上次写完第一篇,竟然有人催着写第二篇。我也体会到了白云大妈被催着写《月子2》的心情了,那是相当地激动。

闲话少叙,直入正题。上次说到,我们把要输入的东西,放入一个由权重组成的网络,经过简单的矩阵乘法就能得到输出。有人会问了,输入是按我的意图输入的,那输出的东西是我要的吗?比如,给我。

这里要指出的是,神经网络在养成之前,输出的东西真的不是你想要的。记住,神经网络在培养之前,给不了你想要的东西。

举个栗子,说明一下为什么会这样。你想啊,一个未懂事的小孩,你拿个点燃的蜡烛靠近他,他会怎么样?他可能直接拿手去抓这个火焰。原因就在于蜡烛火焰绚丽的输入,经过小孩的神经网络计算后,输出了手抓的冲动,当然这个输出不是我们想要的,这是一个错误的输出。那么,小孩的神经网络就需要去培养,比如,你可以经常拿蜡烛去烫他,慢慢的这个神经网络就会有正确的输出-看到蜡烛就会躲避,甚至见到蜡烛就会哭。(我想,看到这里,就会认同给孩子一定的挫折教育,这样可以形成强大的抗压神经网络)。

好了,孩子是生出来的。我们的神经网络(也就是权重)首先也要生出来,怎么生出初始化的神经网络呢。答案是随机生成。

随机生成后,我们用训练集的数据去训练它。训练集就是一组有明确输入,并且知道正确输出的数据。也就是说,你知道训练集的答案。比如我们去培养一个小孩躲避危险,训练集是这样的{火焰,躲开;坏人,报警;地震,趴下;...},一个小孩得到这样的训练后,他会形成一个会躲避危险的神经网络。

现在把训练集的第一个数据集输入神经网络,经过矩阵计算得到输出,得到输出后,对一下正确答案吧,这个输出也许离正确有十万八千里。没关系,我们看一下误差。知道差距了,才知道怎么去改正。

当当当...梯度来了。这对不熟悉数学的人来说是一个陌生的概念。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络训练成后,我们可以使用模型对新的输入数据进行预测。以下是使用 TensorFlow 进行简单神经网络训练和测试的示例代码: ```python import tensorflow as tf # 定义输入数据 x = tf.placeholder(tf.float32, [None, input_size]) # 定义模型参数 W = tf.Variable(tf.zeros([input_size, num_classes])) b = tf.Variable(tf.zeros([num_classes])) # 定义模型 y = tf.nn.softmax(tf.matmul(x, W) + b) # 定义损失函数 y_ = tf.placeholder(tf.float32, [None, num_classes]) cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) # 定义优化器 train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy) # 训练模型 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(num_iterations): batch_xs, batch_ys = get_next_batch(train_data, train_labels, batch_size) sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) # 测试模型 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print("Accuracy: ", sess.run(accuracy, feed_dict={x: test_data, y_: test_labels})) ``` 在训练成后,我们可以使用 `sess.run()` 函数来获取模型的输出。例如,如果我们想要对一个新的数据样本进行预测,我们可以将其传递给 `sess.run()` 函数的 `feed_dict` 参数,并获取模型的输出 `y`。下面是一个简单的示例: ```python # 定义要预测的数据 new_data = [[5.1, 3.5, 1.4, 0.2]] # 获取预测结果 prediction = sess.run(y, feed_dict={x: new_data}) # 打印预测结果 print(prediction) ``` 在上面的代码中,我们将 `new_data` 作为输入数据传递给模型,并使用 `sess.run()` 函数获取模型的输出 `y`。然后,我们打印预测结果即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值