Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的图像分类模型是用tensorflow don';我学不会_Python_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Python 我的图像分类模型是用tensorflow don';我学不会

Python 我的图像分类模型是用tensorflow don';我学不会,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在尝试建立一个图像分类模型来预测你是否戴着面具。这是我第一次做自己的模型,当我训练它时,准确率跳到50%左右,如果我预测它总是说“没有面具”,我尝试改变epoche的数量、批量大小、训练数据的数量改变模型代码,但什么都不起作用。这是我的代码: import os import cv2 import random import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.lay

我正在尝试建立一个图像分类模型来预测你是否戴着面具。这是我第一次做自己的模型,当我训练它时,准确率跳到50%左右,如果我预测它总是说“没有面具”,我尝试改变epoche的数量、批量大小、训练数据的数量改变模型代码,但什么都不起作用。这是我的代码:

import os
import cv2
import random
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten,Dropout
from tensorflow.keras.optimizers import SGD

def preproccesImage(img):
     img = cv2.resize(img,dsize=(150,150 ), interpolation = cv2.INTER_CUBIC)
     return img

def getData():
     training = []

     for image in os.listdir("src/data/with_mask"):
          img = cv2.imread(f"src/data/with_mask/{image}",cv2.IMREAD_GRAYSCALE)
          proccesed = preproccesImage(img)
          training.append([proccesed.tolist(),1])

     for image in os.listdir("src/data/without_mask"):
          img = cv2.imread(f"src/data/without_mask/{image}",cv2.IMREAD_GRAYSCALE)
          proccesed = preproccesImage(img)
          training.append([proccesed.tolist(),0])

     random.shuffle(training)
     train_x = np.array([x[0] for x in training],dtype=np.float32)
     train_y = np.array([x[1] for x in training],dtype=np.float32)
     print(train_x)
     print(train_y)
     return (train_x ,train_y)

train_x , train_y = getData()

model = Sequential()

model.add(Dense(32,input_shape=(len(train_x[0]),150),activation="relu"))
model.add(Flatten())
model.add(Dense(128,activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(128,activation="relu"))
model.add(Flatten())
model.add(Dense(1,activation="softmax"))


model.compile(loss="categorical_crossentropy",
              optimizer="adam", metrics=["accuracy"])



hist = model.fit(
    train_x,train_y,
    epochs=200, batch_size=2, verbose=1)
model.save("model.h5", hist)

img = cv2.imread("src/me.png",cv2.IMREAD_GRAYSCALE)
resized = cv2.resize(img,dsize=(150,150 ), interpolation = cv2.INTER_CUBIC)


def predict():
     res = model.predict([resized.tolist()])[0]
     resoult = [[i, r] for i, r in enumerate(res)]
     predicted = []
     for r in resoult:
        predicted.append({"intent": 1 if r[0] == 1 else 0, "probability": r[1]})
     if predicted[0]["intent"] == 1:
          print("mask on")
     else:
          print('no mask')
     
predict()

如果有人能帮忙,我会很高兴的

这不是二进制分类的正确组合;您应该将您的损失更改为
binary\u crossentropy
,并将最后一层的激活更改为
sigmoid
,即:

model.add(Dense(1,activation="sigmoid"))  # last layer

model.compile(loss="binary_crossentropy",
              optimizer="adam", metrics=["accuracy"])

更一般地说,在模型的早期阶段,您确实可以从一些卷积层中获益;还要注意的是,将
展平
层放置在
密集
层之后没有任何意义。

现在精度提高了,但我仍然一直在获得“无遮罩”