import warnings
warnings.filterwarnings("ignore")
import keras
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
mnist = keras.datasets.mnist # 导入 mnist
(train_images, train_labels),(test_images,test_labels) = mnist.load_data()
60000条训练集,10000条测试集
print("train image shape:",train_images.shape,"train label",train_labels.shape)
print("test image shape:",test_images.shape,"test label",test_labels.shape)
-->print("image data:",train_images[0])
print("label data:",train_labels[0])
# 数据太多太大,这里便不展示了defplot_img(img):
plt.imshow(img.reshape(28,28),cmap="binary") # camp = "binary" 使用灰度图表示
plt.show()
# 查看图片
plot_img(train_images[3])
plot_img(train_images[0])

data_0 = []
data_1 = []
# zip 把里面的子数据 拿出来了,img是(28,28);label 标签是一个值
for img,label in zip(train_images, train_labels):
if label == 0:
# 首先需要把图片拍平,现在的训练是一种类似 DNN 神经网络的模式
# 所以无法传入 28*28 的图片进行训练,reshape(28*28),将二阶变为一阶的 784
# 除以 255 的作用是,约束到 0 到 1 之间
img = img.reshape(28*28)/255
# 将图片和 label 放一起,变成 785 个数据,赋给 img
img = np.append(img,label)
data_0.append(img)
if label == 1:
img = img.reshape(28*28)/255
img = np.append(img,label)
data_1.append(img)
data_0 = np.array(data_0)
data_1 = np.array(data_1)
all_data = np.concatenate([data_0,data_1])
print(all_data.shape)
# --> (12665, 785)np.random.shuffle(all_data) # np.random.shuffle 打乱顺序,避免前面全是0,后面全是 1
# 切分训练集和数据集,按理说 20% 测试集,80%训练集,这里只是简单的 前面的作为训练集,后200个作为测试集
train_data = all_data[:-200]
test_data = all_data[-200:]
# 生成器
def gen_batch(data,batch_size):
np.random.shuffle(data) # 打乱,增加随机性
for i in range(len(data) // batch_size):
cursor = batch_size * i
batch_data = data[cursor : cursor + batch_size]
x = batch_data[:, 0:784] # 第一维度全取,第二维度取前 784 个像素,最后一个是标签
y = batch_data[:, 784]
yield x,y.reshape(-1,1)
remainder = len(data) % batch_size
if remainder != 0:
x, y = data[-remainder:, 0:784], data[-remainder:, 784]
yield x, y.reshape(-1,1)
for x_,y_ in gen_batch(train_data,128):
print(x_.shape)
print(y_.shape)
print('-------')
break
# -->learing_rate = 0.01
num_train_epochs = 50 # 循环训练集总轮数
display_per_step = 100
batch_size = 128
graph = tf.Graph()
with graph.as_default():
x = tf.placeholder(shape=[None,784], dtype=tf.float32, name='x')
y = tf.placeholder(shape=[None,1], dtype=tf.float32, name='y')
w = tf.Variable(tf.ones(shape=[784,1]), dtype=tf.float32)
b = tf.Variable(0, dtype=tf.float32)
logits = tf.matmul(x, w) + b
y_pred = tf.sigmoid(logits)
# 定义loss
with tf.name_scope("loss"):
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=logits), name="calculate_loss")
# 定义优化器
with tf.name_scope("SGD"):
optimizer = tf.train.GradientDescentOptimizer(learing_rate)
train_step = optimizer.minimize(loss)
# 定义正确率
with tf.name_scope("calculation_accuracy"):
res_pred = tf.cast(tf.greater_equal(y_pred, 0.5), dtype=tf.float32)
acc = tf.reduce_mean(tf.cast(tf.equal(res_pred, y), dtype=tf.float32))
with tf.Session(graph=graph) as sess:
init = tf.global_variables_initializer()
sess.run(init)
step = 0
for epoch in range(num_train_epochs):
for x_, y_ in gen_batch(train_data, batch_size):
step += 1
_, l, acc_ = sess.run([train_step, loss, acc], feed_dict={x: x_, y: y_})
if step % display_per_step == 0:
print("step: {:>4}, loss: {:.4}, acc: {:.4%}".format(step, l, acc_))
print('training over')
x_test,y_test = next(gen_batch(test_data,200)) # 取出全部测试集数据
# 查看测试集的 loss 和正确率
loss_test, acc_test = sess.run([loss, acc],feed_dict={x: x_test, y: y_test})
print("test loss is {:.4}, acc is {:.4%}".format(loss_test, acc_test))
res_weights = sess.run([w, b])
# res_weights 存在的目的是进行模型的预测,给出一张图片,判断能否正确预测
-->def plot_img(img):
plt.imshow(img.reshape(28,28),cmap="binary")
plt.show()
test_img = test_data[7,:784]
plot_img(test_img)

graph = tf.Graph()
with graph.as_default():
x = tf.placeholder(shape=[None,784], dtype=tf.float32, name='x')
y = tf.placeholder(shape=[None,1], dtype=tf.float32, name='y')
# w 和 b 是前面训练好的值
w = tf.Variable(res_weights[0], dtype=tf.float32)
b = tf.Variable(res_weights[1], dtype=tf.float32)
logits = tf.matmul(x, w) + b
y_pred = tf.sigmoid(logits)
# 定义loss
with tf.name_scope("loss"):
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=logits), name="calculate_loss")
# 定义优化器
with tf.name_scope("SGD"):
optimizer = tf.train.GradientDescentOptimizer(learing_rate)
train_step = optimizer.minimize(loss)
# 定义正确率
with tf.name_scope("calculation_accuracy"):
res_pred = tf.cast(tf.greater_equal(y_pred, 0.5), dtype=tf.float32)
acc = tf.reduce_mean(tf.cast(tf.equal(res_pred, y), dtype=tf.float32))
with tf.Session(graph=graph) as sess:
# 初始化权重,将前面训练好的权重,放到计算图里
init = tf.global_variables_initializer()
sess.run(init)
# test_data[7,:784].shape 是 (784,)
# 但是 x = tf.placeholder(shape=[None,784], dtype=tf.float32, name='x')
# 所以需要 reshape 成为 (1,-1),也就是第一维是 1,第二维就是 784/1
# 所以 当前这里图片 的 shape 就是 (1,784)
x_ = test_data[7,:784].reshape(1,-1)
# 从这地方可以看出,预测输出的时候,并没有使用标签,所以传参时只传 x 就可以
res_p = sess.run(res_pred, feed_dict={x: x_})
print(res_p)
# --> [[0.]]我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复
在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定