一、环境

安装Anaconda & TensorFlow-20200806

https://www.douban.com/note/773215393/

conda create -n TF_2C python=3.8

conda activate TF_2C

(TF_2C) C:\WINDOWS\system32>

创建并激活环境

conda activate TF_2C

看一下最近的版本号

https://pypi.tuna.tsinghua.edu.cn/simple/tensorflow/

ok,装一个2.4的

pip install tensorflow==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

好吧,开始干正事儿:

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

先装个matplotlib

没球问题

然后看了一下之前的:

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

这咋整?

我需要做一个自己的数据集?

https://www.cnblogs.com/chenhuabin/p/11863889.html

OK,我参考了这篇文章:

有点烦:

import tensorflow as tf
import random
import pathlib
data_path = pathlib.Path('./switchs')
all_image_paths = list(data_path.glob('*/*'))
all_image_paths = [str(path) for path in all_image_paths] # 所有图片路径的列表
random.shuffle(all_image_paths) # 打散
image_count = len(all_image_paths)
print(image_count)

OK,拿到了所有的文件的路径

参考文章:【自己写的豆瓣日记---tf的第一个例子】

https://www.douban.com/note/773251596/

先import库

import matplotlib.pyplot as plt

打开了图片了

OK

需要:

import matplotlib.pyplot as plt
from PIL import Image

引库

以及:

img = Image.open(all_image_paths[0]);
plt.figure()
plt.imshow(img)
plt.colorbar()
plt.grid(False)
plt.show()

============================================================

取labels的名字

import tensorflow as tf
import random
import pathlib
import matplotlib.pyplot as plt
from PIL import Image
def load_and_preprocess_from_path_label(path, label):
image = tf.io.read_file(path) # 读取图片
image = tf.image.decode_jpeg(image, channels=3)
image = tf.image.resize(image, [192, 192]) # 原始图片大小为(266, 320, 3),重设为(192, 192)
image /= 255.0 # 归一化到[0,1]范围
return image, label
data_path = pathlib.Path('./switchs')
all_image_paths = list(data_path.glob('*/*'))
all_image_paths = [str(path) for path in all_image_paths] # 所有图片路径的列表
random.shuffle(all_image_paths) # 打散
image_count = len(all_image_paths)
print(image_count)
# img = Image.open(all_image_paths[0]);
# plt.figure()
# plt.imshow(img)
# plt.colorbar()
# plt.grid(False)
# plt.show()
# 去label名称
label_names = sorted(item.name for item in data_path.glob('*/') if item.is_dir())
print(label_names)
label_to_index = dict((name, index) for index, name in enumerate(label_names))
print(label_to_index)
all_image_labels = [label_to_index[pathlib.Path(path).parent.name] for path in all_image_paths]
print(all_image_labels)
for image, label in zip(all_image_paths[:5], all_image_labels[:5]):
print(image, ' ---> ', label)
ds = tf.data.Dataset.from_tensor_slices((all_image_paths, all_image_labels))
image_label_ds = ds.map(load_and_preprocess_from_path_label)
print(image_label_ds)

完成了一次自定义的ds的加载,接下来回到【tf的第一个例子里面去】

报错咯

ValueError: Failed to find data adapter that can handle input: (<class 'list'> containing values of types {"<class 'tensorflow.python.framework.ops.EagerTensor'>"}), (<class 'list'> containing values of types {"<class 'int'>"})

https://stackoverflow.com/questions/65474081/valueerror-data-cardinality-is-ambiguous-make-sure-all-arrays-contain-the-same

import tensorflow as tf
import random
import pathlib
import matplotlib.pyplot as plt
from PIL import Image
from tensorflow import keras
import numpy as np
def load_and_preprocess_from_path_label(path, label):
image = tf.io.read_file(path) # 读取图片
image = tf.image.decode_jpeg(image, channels=1)
image = tf.image.resize(image, [192, 192]) # 原始图片大小为(266, 320, 3),重设为(192, 192)
image /= 255.0 # 归一化到[0,1]范围
return image, label
data_path = pathlib.Path('./switchs')
all_image_paths = list(data_path.glob('*/*'))
all_image_paths = [str(path) for path in all_image_paths] # 所有图片路径的列表
random.shuffle(all_image_paths) # 打散
image_count = len(all_image_paths)
print(image_count)
image = tf.io.read_file(all_image_paths[0]) # 读取图片
image = tf.image.decode_jpeg(image, channels=3)
image = tf.image.resize(image, [192, 192]) # 原始图片大小为(266, 320, 3),重设为(192, 192)
image /= 255.0 # 归一化到[0,1]范围
plt.figure()
plt.imshow(image)
plt.colorbar()
plt.grid(False)
# plt.show()
# img = Image.open(all_image_paths[0]);
# plt.figure()
# plt.imshow(img)
# plt.colorbar()
# plt.grid(False)
# plt.show()
# 去label名称
label_names = sorted(item.name for item in data_path.glob('*/') if item.is_dir())
print(label_names)
label_to_index = dict((name, index) for index, name in enumerate(label_names))
print(label_to_index)
all_image_labels = [label_to_index[pathlib.Path(path).parent.name] for path in all_image_paths]
print(all_image_labels)
ds = tf.data.Dataset.from_tensor_slices((all_image_paths, all_image_labels))
train_images = []
train_labels = []
for image, label in zip(all_image_paths, all_image_labels):
print(image, ' ---> ', label)
(img,lab) = load_and_preprocess_from_path_label(image,label)
# print(img)
# print(label)
train_images.append(img)
train_labels.append(lab)
# 转换普通的list类型到numpy的数组去,然后才能输入
train_images = np.array(train_images)
train_labels = np.array(train_labels)
# 定义模型
model = keras.Sequential([
keras.layers.Flatten(input_shape=(192, 192)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(2)
])
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 输入数据给模型
model.fit(train_images, train_labels, epochs=100)

https://www.zhihu.com/question/58287577/answer/218005760

=============================================================

https://www.tensorflow.org/lite/guide/python

看了一下树莓派3的python,竟然是3.5的