Tensorflow 具有校正线性单元的单隐层神经网络

Tensorflow 具有校正线性单元的单隐层神经网络,tensorflow,neural-network,artificial-intelligence,classification,mnist,Tensorflow,Neural Network,Artificial Intelligence,Classification,Mnist,我的目标是实现一个1隐藏层神经网络,其中包含校正的线性单元nn.relu()和1024个隐藏节点 #这些是我们稍后将使用的所有模块。确保您可以导入它们 #在继续之前。 来自未来导入打印功能 将matplotlib.pyplot作为plt导入 将numpy作为np导入 导入操作系统 导入系统 导入tarfile 从IPython.display导入显示,图像 从scipy导入ndimage 从sklearn.linear_模型导入逻辑回归 从six.moves.urllib.request导入ur

我的目标是实现一个1隐藏层神经网络,其中包含校正的线性单元
nn.relu()
和1024个隐藏节点

#这些是我们稍后将使用的所有模块。确保您可以导入它们
#在继续之前。
来自未来导入打印功能
将matplotlib.pyplot作为plt导入
将numpy作为np导入
导入操作系统
导入系统
导入tarfile
从IPython.display导入显示,图像
从scipy导入ndimage
从sklearn.linear_模型导入逻辑回归
从six.moves.urllib.request导入urlretrieve
从6.0开始,将导入cPickle作为pickle
从六点开始,移动输入范围
导入tensorflow作为tf
url='1〕https://commondatastorage.googleapis.com/books1000/'
上次报告的百分比=无
数据_root='。#将我更改为将数据存储到其他位置
def下载进度挂钩(计数、块大小、总大小):
“”“报告下载进度的钩子。这主要是为具有
互联网连接速度慢。下载进度每变化5%报告一次。
"""
报告的全球最后百分比
百分比=整数(计数*块大小*100/总大小)
如果上次报告的百分比!=百分比:
如果百分比%5==0:
sys.stdout.write(“%s%%”%percent)
sys.stdout.flush()
其他:
系统标准写入(“.”)
sys.stdout.flush()
上次报告的百分比=百分比
def下载(文件名,预期字节数,force=False):
“”“下载不存在的文件,并确保其大小正确。”“”
dest\u filename=os.path.join(数据根,文件名)
如果强制或不强制os.path.exists(目标文件名):
打印('正在尝试下载:',文件名)
文件名,u=urlretrieve(url+filename,dest\u filename,reporthook=download\u progress\u hook)
打印('\n下载完成!')
statinfo=os.stat(dest\u文件名)
如果statinfo.st_size==预期的_字节:
打印('找到并验证',目标文件名)
其他:
引发异常(
'验证'+dest_filename+'失败。您能用浏览器访问它吗?')
返回dest_文件名
#如果下载时出错,请在此处获取:http://yaroslavvb.com/upload/notMNIST/
train_filename=maybe_download('notMNIST_large.tar.gz',247336696)
test_filename=maybe_download('notMNIST_small.tar.gz',8458043)
num_类=10
np.随机种子(133)
def\u extract(文件名,force=False):
root=os.path.splitext(os.path.splitext(文件名)[0])[0]#remove.tar.gz
如果os.path.isdir(根目录)和not force:
#您可以通过设置force=True来覆盖。
打印(“%s”已存在-跳过提取%s.%(根,文件名))
其他:
打印('正在提取%s的数据。这可能需要一段时间。请稍候。'%root)
tar=tarfile.open(文件名)
sys.stdout.flush()
tar.extractall(数据根)
结束
数据\u文件夹=[
已排序(os.listdir(root))中d的os.path.join(root,d)
如果os.path.isdir(os.path.join(root,d))]
如果len(数据文件夹)!=num_类:
引发异常(
'应为%d个文件夹,每个类一个。改为找到%d个。'%(
num_类,len(数据文件夹)))
打印(数据文件夹)
返回数据文件夹
train\u folders=可能提取(train\u文件名)
test\u folders=可能提取(test\u文件名)
pickle\u文件='notMNIST.pickle'
打开(pickle_文件,'rb')作为f:
save=pickle.load(f,encoding='latin1')
列车数据集=保存[“列车数据集”]
列车标签=保存[“列车标签”]
valid_dataset=保存['valid_dataset']
有效的标签=保存['valid\u labels']
test\u dataset=save['test\u dataset']
测试标签=保存[“测试标签”]
del save#提示帮助gc释放内存
打印('Training set',train_dataset.shape,train_labels.shape)
打印('Validation set',valid_dataset.shape,valid_labels.shape)
打印('testset',Test_dataset.shape,Test_labels.shape)
图像大小=28
标签数量=10
def重新格式化(数据集、标签):
dataset=dataset.Reformate(-1,图像大小*图像大小)).astype(np.float32)
#将0映射到[1.0,0.0,0.0…],将1映射到[0.0,1.0,0.0…]
标签=(np.arange(num_标签)=标签[:,无]).astype(np.float32)
返回数据集、标签
序列号数据集,序列号标签=重新格式化(序列号数据集,序列号标签)
有效的\u数据集,有效的\u标签=重新格式化(有效的\u数据集,有效的\u标签)
测试数据集,测试标签=重新格式化(测试数据集,测试标签)
打印('Training set',train_dataset.shape,train_labels.shape)
打印('Validation set',valid_dataset.shape,valid_labels.shape)
打印('testset',Test_dataset.shape,Test_labels.shape)
批量大小=128
隐藏节点=1024
graph=tf.graph()
使用graph.as_default():
x_train=tf.placeholder(tf.float32,shape=(批处理大小、图像大小*图像大小))
y=tf.占位符(tf.float32,形状=(批大小,数量标签))
x_valid=tf.constant(有效数据集)
x_test=tf.常数(test_数据集)
隐藏层=tf.contrib.layers.完全连接(x列,隐藏节点)
logits=tf.contrib.layers.fully_connected(隐藏的_层、数字标签、激活_fn=None)
损失=tf.reduce\u mean(tf.nn.softmax\u cross\u熵与logits(logits=logits,labels=y))
优化器=tf.train.GradientDescentOptimizer(0.5).最小化(损失)
列车预测=tf.nn.softmax(logits)
有效的\u relu=tf.contrib.layers.fully\u连接(x\u有效的隐藏节点)
valid_prediction=tf.nn.softmax(tf.contrib.layers.fully_connected(valid_relu,num_标签))
test\u relu=tf.contrib.layers.完全连接(x\u测试,隐藏节点,激活\u fn=None)
test_prediction=tf.nn.softmax(tf.contrib.layers.fully_connected(test_relu,num_标签,activation_fn=None))
步数=3001
使用tf.Session(graph=graph)作为会话:
tf.global_variables_initializer().run()
对于步进范围(步数):
#在训练数据中选择某些部分
#注:最好将数据集随机化,用于小批量SGD
偏移量=(步长*批量大小)%(系列标签.形状[0]-批量大小)
#生成小批量
批次数据=序列数据集[偏移量:(偏移量+批次大小),:]
批次标签=系列标签