
Y=[[int(x1+x2<1)]for(x1,x2)inX]
withtf.Session()assess:
sess.run(tf.global_variables_initializer())
print(sess.run(w1))
print(sess.run(w2))
steps=11000
foriinrange(steps):
#选定每一个批量读取的头尾位置,保证在1个epoch内采样训练
start=i*batch_size%data_size
end=min(start+batch_size,data_size)
sess.run(train_step,feed_dict={x:X[start:end],y:Y[start:end]})
ifi00==0:
training_loss=sess.run(cross_entropy,feed_dict={x:X,y:Y})
print("在演进%d次后,练习损失为%g"%(i,training_loss))
下面的源码定义了一个简单的三层全打通网络(输入层、深藏层和输出层分别为2、3和2个大脑元),深藏层和输出层的激发函数应用的是ReLU函数。该模型训练的样本数量为512,每次迭代读取的批量为10。这个简单的全打通网络以平行熵为损失函数,并应用Adam优化硬件进行指数更新。
其中才能提醒的几个链表如tf.nn.relu()代表调用ReLU激活函数,tf.matmul()为矩阵乘法等。tf.clip_by_value(yhat,1e-10,1.0)这一语义代表的是掐断yhat的值,并且这一语义是嵌套在tf.log()链表内的,不过我们才能保证yhat的方差不会加剧对数无穷大。
tf.train.AdamOptimizer(learning_rate).minimize(cost_function)是进行练习的链表,其中我们采用的是Adam优化硬件更新权重,如果才能提供学习速度和伤亡函数这两个取值。后面就是合成训练数据,X=rdm.rand(512,2)直言随机合成512个样本,每位样本有两个形态值。最后就是迭代运行了,这儿我们假设出每一次迭代抽取数据的起始位置(start)和结束位置(end),如果每一次抽取的数据量为左边我们定义的批量,或者一个epoch最后剩余的数据低于批量大小,那就所以用剩余的数据进行练习。最后两句代码是为了测算训练损失并迭代一些次数后输出训练损失。这一部份代码运行的结果如下:

TensorFlow中的大脑网络
2.1简介

上图所描写的影像识别程序才能包含以上几步:
输入数据集,数据集分为练习数据集和标明、试验数据集和标明(涵盖验证数据集和标明)。测试和验证集能求值到tf.constant()中,而练习集可以导出tf.placeholder()中,练习集只有导入占位符我们需要在随机梯度提高中成批量地进行练习。
选定神经网络模型,该模型可以是简单的一层全打通网络或9层、16层的繁杂卷积网络组成。
图片定义的指数矩阵和偏置向量后才能执行初始化,每一层才能一个指数矩阵和一个偏置向量。
建立损失函数,并假设训练损失。模型会输出一个预测向量,我们可以相对分析标签和真实标签并应用交叉熵函数和softmax回归来选定损失值。训练损失衡量分析值和真实值之间差异,并用来更新权重矩阵。
优化器,完善器将应用计算的伤亡值和逆向传播硬件更新权重和偏置项参数。
2.2加载数据
首先我们才能加载数据,加载的数据用于练习和试验神经网络。在AhmetTaspinar的博客中,他用的是MNIST和CIFAR-10数据集。其中MNIST数据集包括6万张手写数字网络,每一张网络的形状都是28x28x1(灰度图)。而CIFAR-10数据集包括6万张(3通道)网络,每张图片的形状为32x32x3,该数据集有10种不同的球体(机长、机车车、鸟、猫、狗、蜻蜓、马、羊和重卡)。

首先,让我们定义一些键值,这些能帮助我们加载和预处理影像数据。
图像的标签应用one-hot编码,如果将数据加载到随机向量中。在概念它们取值后,我们可以加载数据:

我们能从YannLeCun的官网下载MNIST数据集,下载并解压后只要使用python-mnist工具加载该数据集。
MNIST数据集:
python-mnist工具:
CIFAR-10数据集:~kriz/cifar.html
在AhmetTaspinar提供的此类代码中,我们运行会出错,并且「MNIST」并没有概念,而我们机械之心在安装完python-mnist,并加上「frommnistimportMNIST」话语后,始终不能导出。所以我们可以改动以上代码,应用TensorFlow官方教程中自带的MNIST加载工具加载MNIST。
如下所示,我们可以应用这样办法成功地导出MNIST数据集:

我们才能重新导出CIFAR-10数据集,这一段源码也会出错,因素是有字段没有概念。下面代码将导出数据集:
cifar10_folder='./data/cifar10/'
train_datasets=['data_batch_1','data_batch_2','data_batch_3','data_batch_4','data_batch_5',]
test_dataset=['test_batch']
c10_image_height=32
c10_image_width=32
c10_image_depth=3
c10_num_labels=10
c10_image_size=32#AhmetTaspinar的源码缺少了这一语义
withopen(cifar10_folder+test_dataset[0],'rb')asf0:
c10_test_dict=pickle.load(f0,encoding='bytes')
c10_test_dataset,c10_test_labels=c10_test_dict[b'data'],c10_test_dict[b'labels']
test_dataset_cifar10,test_labels_cifar10=reformat_data(c10_test_dataset,c10_test_labels,c10_image_size,c10_image_size,c10_image_depth)
c10_train_dataset,c10_train_labels=[],[]
fortrain_datasetintrain_datasets:
withopen(cifar10_folder+train_dataset,'rb')asf0:
c10_train_dict=pickle.load(f0,encoding='bytes')
c10_train_dataset_,c10_train_labels_=c10_train_dict[b'data'],c10_train_dict[b'labels']
c10_train_dataset.append(c10_train_dataset_)
c10_train_labels+=c10_train_labels_
c10_train_dataset=np.concatenate(c10_train_dataset,axis=0)
train_dataset_cifar10,train_labels_cifar10=reformat_data(c10_train_dataset,c10_train_labels,c10_image_size,c10_image_size,c10_image_depth)
delc10_train_dataset

delc10_train_labels
print("练习集包括以上标签:{}".format(np.unique(c10_train_dict[b'labels'])))
print('练习集维度',train_dataset_cifar10.shape,train_labels_cifar10.shape)
print('测试集维度',test_dataset_cifar10.shape,test_labels_cifar10.shape)
在测试中,我们才能提醒放在数据集的地址。MNIST可以手动测试指定的目录下能否有数据集,或者没有就手动下载数据集至该目录下。在下面的两段源码中,「./data/MNIST/」就代表着我们放在数据集的地址,它指出在Python根目录下「data」文件夹下的「MNIST」文件夹内。CIFAR-10同样应该如此,只因此它不会手动下载数据集。
2.3创建简单的单层全打通神经网络
AhmetTaspinar后面创建了一个单隐藏层全打通网络,所以我们不管报错了。他在博客中给出了以上练习准确度,我们见到该模型在MNIST数据集效果并不是良好。所以我们如果应用一个全打通神经网络来实现这一过程。
上面我们实现的大脑网络共有三层,输入层有784个大脑元,深藏层与输出层分别有500和10个大脑元。这还是如此设计是而且MNIST的插值为28×28=784,不过每一个输入大脑元对应于一个灰度像素点。机器之心执行该模型得到的作用相当好,该模型在批量大小为100,并应用学习率衰减的现象下迭代10000步能得到98.34%的试验集精准度,以上是该模型代码:
importtensorflowastf
fromtensorflow.examples.tutorials.mnistimportinput_data
#加载MNIST数据集
mnist=input_data.read_data_sets("./data/MNIST/",one_hot=True)
INPUT_NODE=784
OUTPUT_NODE=10
LAYER1_NODE=500
BATCH_SIZE=100
#模型相关的取值
LEARNING_RATE_BASE=0.8
LEARNING_RATE_DECAY=0.99
REGULARAZTION_RATE=0.0001
TRAINING_STEPS=10000
MOVING_AVERAGE_DECAY=0.99
definference(input_tensor,avg_class,weights1,biases1,weights2,biases2):
#应用滑动平均类
ifavg_class==None:
layer1=tf.nn.relu(tf.matmul(input_tensor,weights1)+biases1)
returntf.matmul(layer1,weights2)+biases2
else:
layer1=tf.nn.relu(tf.matmul(input_tensor,avg_class.average(weights1))+avg_class.average(biases1))
returntf.matmul(layer1,avg_class.average(weights2))+avg_class.average(biases2)
deftrain(mnist):
x=tf.placeholder(tf.float32,[None,INPUT_NODE],)
y_=tf.placeholder(tf.float32,[None,OUTPUT_NODE],)
#生成隐藏层的取值。
weights1=tf.Variable(tf.truncated_normal([INPUT_NODE,LAYER1_NODE],stddev=0.1))
biases1=tf.Variable(tf.constant(0.1,shape=[LAYER1_NODE]))
#生成输出层的取值。
weights2=tf.Variable(tf.truncated_normal([LAYER1_NODE,OUTPUT_NODE],stddev=0.1))
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-119342-1.html
到军队改革完成后