技术标签: scikitl-learn 人工神经网络 DNN 《机器学习实战——基于Scikit-Learn和TensorFlow》 TensorFlow 机器学习实战
《机器学习实战——基于Scikit-Learn和TensorFlow》
这是一本非常好的机器学习和深度学习入门书,既有基本理论讲解,也有实战代码示例。
我将认真阅读此书,并为每一章内容做一个知识笔记。
我会摘录一些原书中的关键语句和代码,若有错误请为我指出。
兴起的原因:
。。。。。。
与或非们
最简单的ANN架构之一。
heabiside和sgn两种阶跃函数。
单层感知器无法解决异或分类问题,可以使用多层感知器解决。
def heaviside(z):
return (z >= 0).astype(z.dtype)
def mlp_xor(x1, x2, activation=heaviside):
return activation(-activation(x1 + x2 - 1.5) + activation(x1 + x2 - 0.5) - 0.5)
x1s = np.linspace(-0.2, 1.2, 100)
x2s = np.linspace(-0.2, 1.2, 100)
x1, x2 = np.meshgrid(x1s, x2s)
z1 = mlp_xor(x1, x2, activation=heaviside)
z2 = mlp_xor(x1, x2, activation=sigmoid)
plt.figure(figsize=(10,4))
plt.subplot(121)
plt.contourf(x1, x2, z1)
plt.plot([0, 1], [0, 1], "gs", markersize=20)
plt.plot([0, 1], [1, 0], "y^", markersize=20)
plt.title("Activation function: heaviside", fontsize=14)
plt.grid(True)
plt.subplot(122)
plt.contourf(x1, x2, z2)
plt.plot([0, 1], [0, 1], "gs", markersize=20)
plt.plot([0, 1], [1, 0], "y^", markersize=20)
plt.title("Activation function: sigmoid", fontsize=14)
plt.grid(True)
一个MLP包含一个输入层,一个或多个被成为隐藏层的LTU层,以及一个被称为输出层的LTU组成的最终层。
除了输出层外,没层都包含一个偏移神经元,并且与下一层完全相连。
如果一个ANN有2个以及以上的隐藏层,则别成为深度神经网络(DNN)。
反向传播:略。
阶跃函数替换为逻辑函数,以便反向计算梯度。
略
def neuron_layer(X, n_neurons, name, activation=None):
with tf.name_scope(name):
n_inputs = int(X.get_shape()[1])
stddev = 2 / np.sqrt(n_inputs)
init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)
W = tf.Variable(init, name="kernel")
b = tf.Variable(tf.zeros([n_neurons]), name="bias")
Z = tf.matmul(X, W) + b
if activation is not None:
return activation(Z)
else:
return Z
with tf.name_scope("dnn"):
hidden1 = neuron_layer(X, n_hidden1, name="hidden1",
activation=tf.nn.relu)
hidden2 = neuron_layer(hidden1, n_hidden2, name="hidden2",
activation=tf.nn.relu)
logits = neuron_layer(hidden2, n_outputs, name="outputs")
with tf.name_scope("loss"):
xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,
logits=logits)
loss = tf.reduce_mean(xentropy, name="loss")
def shuffle_batch(X, y, batch_size):
rnd_idx = np.random.permutation(len(X))
n_batches = len(X) // batch_size
for batch_idx in np.array_split(rnd_idx, n_batches):
X_batch, y_batch = X[batch_idx], y[batch_idx]
yield X_batch, y_batch
with tf.Session() as sess:
init.run()
for epoch in range(n_epochs):
for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):
sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
acc_batch = accuracy.eval(feed_dict={X: X_batch, y: y_batch})
acc_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})
print(epoch, "Batch accuracy:", acc_batch, "Val accuracy:", acc_val)
save_path = saver.save(sess, "./my_model_final.ckpt")
先从硬盘上加载模型参数,然后加载数据集即可。
神经网络的灵活性恰好是主要的短板:太多的超参数需要调整。
=> 交叉验证网格搜索
=> Oscar工具
逐渐增减调试过拟合和欠拟合情况、
逐步添加神经元的数量,知道出现过拟合。
可以使用更多的层次和神经元,然后提早结束训练来避免过度拟合。
dropout。
大多数情况隐藏层可使用ReLU。
输出可用sofmax,回归可不用。
虚拟环境管理相关的命令查看已经存在的虚拟环境(base) [wss@i-gjt0cuup ~]$ conda env list# conda environments:#disamb /home/wss/.conda/envs/disambbase * /opt/miniconda3DeepLearning /opt/miniconda3/envs/DeepLearningexample
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 84 Accepted Submission(s) : 25Problem Description某部队进行新兵队列训练,将新兵从一開始按顺序依次编号,并排成一行横队。训练...
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 if ( IOS7_OR_LATER ) { self.edgesForExtendedLayout = UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars = NO; ...
一、什么是循环循环语句就是在某种条件下,一遍一遍重复的执行某个动作。如:从1加到100,重复执行加法的动作,就需要用到循环。二、循环的三要素虽然循环是反复的执行某个动作,但是循环也会停止的,没有停止的循环就是死循环;程序如果写出死循环,这个程序就有问题,所以任何一个程序都会有结束条件,结束条件往往是和变量关联的。循环的三要素包括:循环变量:控制循环,并控制循环结束的条件,每次循环变量都会..._java中如何循环一个对象
Linux/etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件。 linux/etc/group文件是有关于系统管理员对用户和用户组管理的文件,linux用户组的所有信息都存放在/etc/group文件中。具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有/etc/...
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with
BluetoothAdapter是所有Android内对蓝牙操作的入口首先需要声明BluetoothAdapter类型的变量BluetoothAdapter mbluetoothAdapter;在对本地蓝牙进行操作之前,需要先判断本地蓝牙是否已经打开mbluetoothAdapter.isEnabled();当判断蓝牙为打开之后,调用适配器的方法来打开蓝牙mbluetoothAdapter.ena..._android 退出蓝牙音乐demo
从docker到kubernetes实践全接触第二版的java web例子_kubernetes javaweb实例
https://www.cnblogs.com/MonkeyAC/articles/3631401.html转载于:https://www.cnblogs.com/diyunpeng/p/9796062.html
百度坐标转火星坐标/*百度坐标转火星坐标*/x_pi=3.14159265358979324 * 3000.0 / 180.0;function baiduTomars(baidu_point){ var mars_point={lon:0,lat:0}; var x=baidu_point.lon-0.0065; var y=baidu_point.lat-0...._火星坐标转投影坐标
摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析、修改用于标准格式的视频驱动,使其优化后适用于RAW采集格式,在此基础上开发了基于多级缓存管理机制的应用程序,最终达到采集速率至少每秒15帧的要求。 �关键词:视频驱动;DM642;CCD高清传感器;RAW采集格式..._dm642 内核和应用软件
如果你使用的是 Windows10 系统,其实不需要安装第三方软件,就能在任何地方用电脑或手机控制它。首先,我们在需要被控制的电脑上,点击开始菜单点击【设置】按钮再点击【系统】点击左边栏的【关于】你能在这里看到设备名称需要把它记下来,当然,如果原来的名字难以记忆,你可以点击【重命名这台电脑】然后重启即可。然后,在左边栏点击【远程桌面】在这里,启用远程桌面然后我们需要防止这台计算机自动休眠,可以在当..._不使用第三方软件,手机怎么控制电脑