簡體   English   中英

keras中不兼容的密集層錯誤

[英]Incompatible dense layer error in keras

我輸入的是一系列視頻,數量為8500。 每個視頻作為一系列50幀饋送到LSTM,每個幀具有960像素。 因此,輸入dim為8500,50,960,有487種可能的輸出類別,因此輸出尺寸為8500,487。

但是,當我運行以下代碼時,我在keras中遇到了這些錯誤。

任何幫助是極大的贊賞。 謝謝!

(8500,50,960)

(8500,487)

創建模型

添加第一層

添加第二層

添加輸出層

追溯(最近一次通話):

在model.add(Dense(487,activation ='softmax'))中的文件“ /Users/temp/PycharmProjects/detect_sport_video/build_model.py”,第68行

添加文件output / tensor = layer(self.outputs)的文件“ /Users/temp/anaconda/lib/python2.7/site-packages/Keras-1.0.3-py2.7.egg/keras/models.py”,行146 [0])

調用 self.assert_input_compatibility(x)中的文件“ /Users/temp/anaconda/lib/python2.7/site-packages/Keras-1.0.3-py2.7.egg/keras/engine/topology.py”第441行)

在assert_input_compatibility str(K.ndim中,文件“ /Users/temp/anaconda/lib/python2.7/site-packages/Keras-1.0.3-py2.7.egg/keras/engine/topology.py”,第382行(X)))

例外:輸入0與層密_1不兼容:預期ndim = 2,找到的ndim = 3

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np
from PIL import Image
import os

def atoi(video):
    return int(video) if video.isdigit() else video

def natural_keys(video):
    return [ atoi(c) for c in os.path.splitext(video) ]


input_data =np.zeros((8500,50,960))

video_index = 0
data = 'train'
video_list = sorted(os.listdir('/Users/temp/PycharmProjects/detect_sport_video/' + data + '_frame_resize1/'))
video_list.sort(key=natural_keys)


for video in video_list:
    if video != '.DS_Store':
        frame_index = 0
        frame_list = sorted(os.listdir('/Users/temp/PycharmProjects/detect_sport_video/' + data + '_frame_resize1/' + video + '/'))
        frame_list.sort(key=natural_keys)
        for frame in frame_list:
            image = np.asarray(Image.open('/Users/temp/PycharmProjects/detect_sport_video/' + data + '_frame_resize1/' + video + '/' + frame))
            image = image.reshape(image.shape[0] * image.shape[1],3)
            image = (image[:,0] + image[:,1] + image[:,2]) / 3
            image = image.reshape(len(image),1)
            image = image[:960]
            image = image.T
            input_data[video_index][frame_index] = image
            frame_index += 1
        video_index += 1

print input_data.shape

cnt = 1
output_classes = []
with open('/Users/temp/PycharmProjects/detect_sport_video/sports-1m-dataset/' + data + '_correct_links.txt') as input_file:
 while cnt <= 8500:
        output_classes.append(int(input_file.readline().split()[2]))
        cnt += 1
output_data =np.zeros((8500,487))
output_index = 0
while(output_index < 8500):
    output_data[output_index,output_classes[output_index]] = 1
    output_index += 1

print output_data.shape

print("Creating model..")
model = Sequential()
print("Adding first layer..")
model.add(LSTM(100, return_sequences=True,
               input_shape=(50, 960)))

print("Adding second layer..")
model.add(LSTM(100, return_sequences=True))

print("Adding output layer..")
model.add(Dense(487, activation='softmax'))

print "Compiling model.."
model.compile(loss='categorical_crossentropy',
              optimizer='RMSprop',
              metrics=['accuracy'])

print "Fitting model.."
model.fit(input_data,output_data,
          batch_size=50, nb_epoch=100)

另外,如果我在添加每個LSTM層后嘗試打印model.output_shape,則得到的輸出為(None,50,200),但應該為(None,200)。 那就是問題所在。 但我不知道為什么要得到(無,50,200)。 有任何想法嗎?

print(“添加第二層。”)model.add(LSTM(100,return_sequences = False))

暫無
暫無

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

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