簡體   English   中英

如何在 RNN 模型中使用圖像集

[英]How to use a image set in RNN model

您好,我正在嘗試使用 Keras 和 Tensorflow 進行我的第一個 RNN,但是我遇到了一個問題,或者正在重新調整我的圖像以適應模型。

我看過這篇文章,但無法弄清楚重塑:

Keras - 將 3 通道圖像輸入 LSTM

我擁有的是在視頻中的每一幀拍攝的一堆圖像。 我保存了 python 之外的所有幀,所以我有一個非常大的圖像文件夾。我將幀分成 21 幀作為一個片段,所以我想捕獲每個運動的 21 個圖像。 我想將這 21 張圖像作為一個序列讀取。 我有從多個攝像機/角度捕獲的相同序列,我想在這個模型中給我們。 我想嘗試的是模擬一個運動,看看一個人是否在做這個運動,所以它基本上是一個二元模型是或否。 不是最復雜的,但它是使用此模型和 keras 的學習過程。

我需要幫助弄清楚如何在 keras 模型中使用這些圖像。 我看過一些關於 MINST 數據集的教程,但這並沒有幫助我弄清楚這一點。 任何幫助將不勝感激。

這是我嘗試訓練模型時給我的錯誤

ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (2026, 200, 200, 1)

我的代碼是這樣的:

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers import LSTM
from tqdm import tqdm
import cv2
import os
import numpy as np

imageSize = 200

#create lables for each image
def labelImage(img):
    wordLabel = img.split('.')[-3]
    #Conversion to one hot array [lat,not]
    if wordLabel == "FWAC":
        return[1,0]
    else:
        return[0,1]

#Process images and add lables
#Convert data into an array and add its lable
def makeTrainingData():
    print("Creating Training Data")
    trainingData = []
    for img in tqdm(os.listdir(trainDir)):
        label = labelImage(img)
        path = os.path.join(trainDir,img)
        img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img, (imageSize,imageSize))
        trainingData.append([np.array(img),np.array(label)])

    #Save the array file to load it into other models if needed
    np.save("trainingData.npy", trainingData)
    print("Training Data Saved")
    return trainingData

#process the testing data in the same manner
def processTestData():
    print("Creating Testing Data")
    testData = []
    for img in tqdm(os.listdir(testDri)):
        print("image", img)
        path = os.path.join(testDri, img)
        imgNum = img.split(".")[0]
        img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img, (imageSize, imageSize))
        testData.append([np.array(img), imgNum])

    np.save("testingData.npy", testData)
    print("Testing Data Saved")
    return testData



rnnSize = 512

model = Sequential()
model.add(LSTM(rnnSize, input_shape=(imageSize, imageSize)))
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dense(50))
model.add(Activation('sigmoid'))
model.add(Dense(3))  
model.add(Activation('softmax'))


model.compile(loss='mean_squared_error', optimizer='adam',metrics=['accuracy'])

#Data
trainDir = "D:/TrainingDataSets/TrainingSet/"
testDri = "D:/TrainingDataSets/TestingSet/"

#trainData = makeTrainingData()
#testData = processTestData()
trainData = np.load('trainingData.npy')
testData = np.load("testingData.npy")
#resize the image to this See above
train = trainData[:-500]
test = trainData[-200:]

x = []
y = []
for xi in trainData:
    x.append(xi[0].reshape((-1, imageSize, imageSize)))
    y.append(xi[1])

x_train = np.array([i[0] for i in train]).reshape(-1,imageSize, imageSize,1)
y_train = [i[1] for i in train]



test_x = np.array([i[0] for i in test]).reshape(-1,imageSize , imageSize,1)
test_y = [i[1] for i in test]


epoch = 5
batchSize = 100

model.fit(x_train, y_train, epochs=epoch, batch_size= batchSize, verbose=1, shuffle=False)

對於密集層之前的錯誤添加以下行:

model.add(Flatten())

以前,您應該導入:

from keras.layers import Flatten

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM