import keras
from keras.models import Sequential
from keras.applications.vgg16 import VGG16
from keras.layers import Dense, InputLayer, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D, GlobalMaxPooling2D
from keras.preprocessing import image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from tqdm import tqdm
from sklearn.model_selection import train_test_split
y = train['class']
images_train, images_test, y_train, y_test = train_test_split(images, y, random_state=42,
test_size=0.2, stratify = y)
y_train = pd.get_dummies(y_train)
y_test = pd.get_dummies(y_test)
base_model = VGG16(weights='imagenet', include_top=False)
images_train = base_model.predict(images_train)
images_train.shape
images_test = base_model.predict(images_test)
images_test.shape
images_train = images_train.reshape(2321, 8*8*512)
images_test = images_test.reshape(581, 8*8*512)
max = images_train.max()
images_train = images_train/max
images_test = images_test/max
images_train.shape
model=Sequential()
model.add(Conv2D(input_shape=(10, 8, 8, 512),filters=4,kernel_size=
(3,3),padding="same",activation="relu"))
model.add(Conv2D(filters=64,kernel_size=(3,3),padding="same",activation="relu"))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
from keras.callbacks import ModelCheckpoint
mcp_save = ModelCheckpoint('weight.hdf5', save_best_only=True, monitor='val_loss', mode='min')
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
import tensorflow as tf
train_data = tf.data.Dataset.from_tensor_slices((images_train, y_train))
valid_data = tf.data.Dataset.from_tensor_slices((images_test, y_test))
model.fit(train_data, epochs=40, validation_data=valid_data, callbacks=[mcp_save],
batch_size=10)我已经创建了一个由四个不同的活动组成的数据集,这些活动是
发布于 2021-05-23 20:35:28
我无法从您的代码中读到那么多,但是您的输入形状对网络来说是错误的。您尝试将images_train输入到VGG网络中。VGG网需要输入一个四维的numpy数组.它有形状(batch_size、通道、宽度、高度)或(batch_size,宽度、高度、通道),这取决于您是选择了"channels_last“还是"channels_first”数据格式(我不知道该在哪里设置,但是其中一个应该工作)。
您对网络的输入没有此形状,这就是您收到错误的原因。尝试运行np.shape(images_train),然后您可以看到输入的形状。如果这不是四维的,那么您的输入就不适合VGG网.
https://stackoverflow.com/questions/67659576
复制相似问题