![](/img/trans.png)
[英]How to set activation or optimiser for deeplearning model only accept 1,0 for RNN
[英]How to use a image set in RNN model
您好,我正在嘗試使用 Keras 和 Tensorflow 進行我的第一個 RNN,但是我遇到了一個問題,或者正在重新調整我的圖像以適應模型。
我看過這篇文章,但無法弄清楚重塑:
我擁有的是在視頻中的每一幀拍攝的一堆圖像。 我保存了 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.