
一、环境
安装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'>"})

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的