TensorFlow对数据集的图片操作

TensorFlow网络在输入Numpy数据时会自动转换为Tensor来处理,但是我们自己也可以去显式的转换:

data_tensor= tf.convert_to_tensor(data_numpy)

网络输出的结果仍为Tensor,当我们要用这些结果去执行只能由Numpy数据来执行的操作时就会出现莫名其妙的错误。解决方法

with tf.Session() as sess:
    data_numpy = data_tensor.eval()

数据集的处理,卷积。conv2d

import numpy as np
import tensorflow as tf
from sklearn.datasets import load_sample_images
import matplotlib.pyplot as plt

#输入的照片是三通道的(三维),读取数据

daraset=np.array(load_sample_images().images,dtype=np.float32)

#数据集中有一个寺庙的照片和一个画的照片
b_size,height,weight,channel=daraset.shape#参数分别为图片数目,图片的宽,图片的高,图片的通道
print(b_size,height,weight,channel)

#创建两个卷积核
filter1=np.zeros(shape=(7,7,channel,2),dtype=np.float32)
filter1[:,3,:,0]=1
filter1[3,:,:,1]=2

# filter参数是一个filters的集合
X = tf.placeholder(tf.float32, shape=(None, height, weight, channel))

#经过卷积后的层
conv=tf.nn.conv2d(X,filter=filter1,strides=[1,2,2,1],padding="SAME")

with tf.Session() as sess:
    output=sess.run(conv,feed_dict={X:daraset})

plt.imshow(output[0,:,:,0])#第一个图的第一个特征图
plt.show()
#第一个图的第二个特征图
plt.imshow(output[0,:,:,1])
plt.show()
plt.imshow(output[1,:,:,0])#第一个图的第一个特征图
plt.show()
#第一个图的第二个特征图
plt.imshow(output[1,:,:,1])
plt.show()


在这里插入图片描述

对图片进行池化操作,max_pool最大池化。

import numpy as np
from sklearn.datasets import load_sample_images
import tensorflow as tf
import matplotlib.pyplot as plt


# 加载数据集
# 输入图片通常是3D,[height, width, channels]
# mini-batch通常是4D,[mini-batch size, height, width, channels]
dataset = np.array(load_sample_images().images, dtype=np.float32)
# 数据集里面两张图片,一个中国庙宇,一个花
batch_size, height, width, channels = dataset.shape
print(batch_size, height, width, channels)

# 创建输入和一个池化层
X = tf.placeholder(tf.float32, shape=(None, height, width, channels))
# TensorFlow不支持池化多个实例,所以ksize的第一个batch size是1
# TensorFlow不支持池化同时发生的长宽高,所以必须有一个是1,这里channels就是depth维度为1
max_pool = tf.nn.max_pool(X, ksize=[1, 4, 4, 1], strides=[1, 4, 4, 1], padding='VALID')
# avg_pool()

with tf.Session() as sess:
    output = sess.run(max_pool, feed_dict={X: dataset})

plt.imshow(dataset[0].astype(np.uint8))
plt.show()
plt.imshow(output[0].astype(np.uint8))  # 画输入的第一个图像
plt.show()

plt.imshow(dataset[1].astype(np.uint8))
plt.show()
plt.imshow(output[1].astype(np.uint8))  # 画输入的第一个图像
plt.show()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值