【发布时间】:2019-08-14 05:06:23
【问题描述】:
我正在尝试将第 k 个动作数据集提供给 cnn。我很难重塑数据。我创建了这个数组 (99,75,120,160) type=uint8 ,即属于一个类的 99 个视频,每个视频有 75 帧,每帧尺寸为 120x160。
model = Sequential()
model.add(TimeDistributed(Conv2D(64, (3, 3), activation='relu', padding='same'),
input_shape=()))
###need to reshape data in input_shape
我应该先指定一个密集层吗?
这是我的代码
model = Sequential()
model.add(TimeDistributed(Conv2D(64, (3, 3), activation='relu', padding='same'),
input_shape=(75,120,160)))
###need to reshape data in input_shape
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Conv2D(32, (3, 3), activation='relu', padding='same')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Conv2D(16, (3, 3), activation='relu', padding='same')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(units=64, return_sequences=True))
model.add(TimeDistributed(Reshape((8, 8, 1))))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(16, (3,3), activation='relu', padding='same')))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(32, (3,3), activation='relu', padding='same')))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(64, (3,3), activation='relu', padding='same')))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(1, (3,3), padding='same')))
model.compile(optimizer='adam', loss='mse')
data = np.load(r"C:\Users\shj_k\Desktop\Project\handclapping.npy")
print (data.shape)
(x_train,x_test) = train_test_split(data)
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
print (x_train.shape)
print (x_test.shape)
model.fit(x_train, x_train,
epochs=100,
batch_size=1,
shuffle=False,
validation_data=(x_test, x_test))
变量是 x_test (25,75,120,160) 类型=float32 x_train (74,75,120,160) type=float32
评论中的完全错误是
runfile('C:/Users/shj_k/Desktop/Project/cnn_lstm.py', wdir='C:/Users/shj_k/Desktop/Project') (99, 75, 120, 160) (74, 75, 120, 160) (25, 75, 120, 160) Traceback(最近一次调用最后一次):
文件“”,第 1 行,在 runfile('C:/Users/shj_k/Desktop/Project/cnn_lstm.py', wdir='C:/Users/shj_k/Desktop/Project')
文件 "C:\Users\shj_k\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 第 668 行,在运行文件中 execfile(文件名,命名空间)
文件 "C:\Users\shj_k\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 第 108 行,在 execfile 中 exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/shj_k/Desktop/Project/cnn_lstm.py”,第 63 行,在 验证数据=(x_test, x_test))
文件 "C:\Users\shj_k\Anaconda3\lib\site-packages\keras\engine\training.py", 第 952 行,合适 batch_size=batch_size)
文件 "C:\Users\shj_k\Anaconda3\lib\site-packages\keras\engine\training.py", 第 751 行,在 _standardize_user_data exception_prefix='输入')
文件 "C:\Users\shj_k\Anaconda3\lib\site-packages\keras\engine\training_utils.py", 第 128 行,在 standardize_input_data 中 '带形状' + str(data_shape))
ValueError:检查输入时出错:预期 time_distributed_403_input 有 5 个维度,但是得到了数组 形状(74、75、120、160)
感谢您的回复
【问题讨论】:
-
尝试指定 input_shape=(75, 120, 160)
-
我刚刚做了并且得到了错误返回 self._dims[key] IndexError: list index out of range
-
我尝试了 input_shape=(1,120,160,75) 并得到了错误 ValueError: Error when checks input: expected time_distributed_403_input to have 5 个维度,但得到了形状为 (74, 75, 120, 160) 的数组)
-
所以 Keras 中的 TimeDistributed 层需要一个时间维度,所以这里的视频图像处理可能是 75(每秒帧数)。然后,它期望图像以 120,60, 3 格式发送。所以最终的 input_shape 应该是 (75, 120, 160, 3)。在 Keras.preprocessing.image 中有 image.img_to_array(img) ,您可以在其中将 PIL 图像转换为 numpy 数组。
-
我尝试按照你说的替换 input_shape 仍然返回相同的错误
标签: python numpy opencv keras deep-learning