python - ValueError:输入形状的预期轴 -1 的值为 1,但接收到的输入形状为 (None, 1, 300, 300)
问题描述
我在训练中有一个错误。数据 = 512 张图像和两个类(0,1)。数据拆分为 train=409 和 test=103。使用 keras 模型是 cnn
目标模型:图像情感分析
代码:
#Get Lable in excel file
import pandas as pd
from pandas import ExcelWriter
import numpy as np
path_file = '/content/drive/MyDrive/Dataset 1.0/Caption 2.0.xlsx'
dataset = pd.ExcelFile(path_file)
sheet = dataset.parse('Sheet1')
label = sheet['lable'].tolist()
label=np.array(label)
#print(lable)
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
#from keras.optimizers import SGD,RMSprop,adam
from keras.optimizers import Adam
from keras.optimizers import RMSprop
from keras import optimizers
from keras.utils import np_utils
import matplotlib.pyplot as plt
import matplotlib
import os
import theano
from PIL import Image
from numpy import *
from sklearn.utils import shuffle
#from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
img_rows, img_cols = 300, 300
img_channels = 1
path1 = "/content/drive/MyDrive/Dataset 1.0/Media 1.0"
path2 = "/content/drive/MyDrive/Dataset 1.0/image_res"
listing = os.listdir(path1)
num_samples=size(listing)
print(num_samples)
#IMAGE RESIZE
'''for file in listing:
im = Image.open(path1 + '//' + file)
img = im.resize((img_rows,img_cols))
gray = img.convert('L')
#need to do some more processing here
gray.save(path2 +'//' + file, "JPEG")'''
imlist = os.listdir(path2)
im1 = array(Image.open(path2 + '//'+ imlist[0]))
m,n = im1.shape[0:2]
imnbr = len(imlist)
immatrix = array([array(Image.open(path2 + '//'+ im2)).flatten()
for im2 in imlist],'f')
#print(im1)
#print(m,n)
#print(immatrix)
#print(label)
data,Label = shuffle(immatrix,label, random_state=2)
train_data = [data,Label]
#test preproccessing test
img=immatrix[100].reshape(img_rows,img_cols)
plt.imshow(img)
plt.imshow(img,cmap='gray')
print (train_data[0].shape)
print (train_data[1].shape)
batch_size = 32
nb_classes = 2
nb_epoch = 20
nb_filters = 32
nb_pool = 2
nb_conv = 2
(X, y) = (train_data[0],train_data[1])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
print('X_train shape:', X_train.shape)
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
i = 256
plt.imshow(X_train[i, 0], interpolation='nearest')
print("label : ", Y_train[i,:])
模型:
model = Sequential()
model.add(Convolution2D(nb_filters, nb_conv, nb_conv,
#border_mode='valid',
input_shape=(300, 300,1)))
convout1 = Activation('relu')
model.add(convout1)
model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
convout2 = Activation('relu')
model.add(convout2)
model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
convout3 = Activation('relu')
model.add(convout3)
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
#model.add(Activation('softmax'))
model.add(Activation('sigmoid'))
#model.compile(loss='binary_crossentropy', optimizer='adadelta', metrics=['accuracy'])
model.compile(loss='binary_crossentropy', optimizer=optimizers.RMSprop(lr=4), metrics=['accuracy'])
model.summary()
火车:
hist = model.fit(X_train, Y_train, batch_size=batch_size, epochs=nb_epoch,
validation_data=(X_test, Y_test),verbose=1)
火车上的错误:
Epoch 1/20
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-42-2a47c86342f3> in <module>()
1
2 hist = model.fit(X_train, Y_train, batch_size=batch_size, epochs=nb_epoch,
----> 3 validation_data=(X_test, Y_test),verbose=1)
4 '''model.fit_generator(X_train, Y_train,batch_size=batch_size,
5 validation_data=(X_test, Y_test), validation_steps=20, epochs=5, verbose=1)'''
9 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args,
**kwargs)
975 except Exception as e: # pylint:disable=broad-except
976 if hasattr(e, "ag_error_metadata"):
--> 977 raise e.ag_error_metadata.to_exception(e) 978 else: 979 raise
ValueError: in user code:
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:805 train_function *
return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:795 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:788 run_step **
outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:754 train_step
y_pred = self(x, training=True)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py:998 __call__
input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/input_spec.py:259 assert_input_compatibility
' but received input with shape ' + display_shape(x.shape))
ValueError: Input 0 of layer sequential_8 is incompatible with the layer: expected axis -1 of input shape to have value 1 but received input with shape (None, 1, 300, 300)
解决方案
推荐阅读
- ios - WKWebView:在 Safari 中打开链接的问题
- python-3.x - 优化 pandas 迭代
- c# - Acumatica:新的 PXSelectJoin 之间的区别
这个问题是理论上的,我想了解一般差异和性能问题,特别是在给出相同结果的两个不同定义之间。我有
GLProcessingModel
一个引用图表的类(所以它没有直接引用 UI)。该类有一个方法可以确定一个项目是否具有某些价值(目前我的代码看起来像这样):- android - Android - 与 python 脚本相比,改造很慢
- github - 你可以在 Github 上更改问题的受理人吗?
- python - Django Rest 框架:使用 ListModelMixin 进行分页
- c# - AWS Cognito 更改密码 .Net Core 3 MVC
- docker-compose - 在本地和生产环境之间维护 DJANGO_SETTINGS_MODULE
- c++ - CRTP 基类构造函数能否访问派生数据成员
- apache-spark - 如何使用火花窗口功能作为上一行到下一行的级联更改