Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想实现一个多层神经网络,但我得到的错误是大小为1的数组可以转换为python标量_Python_Numpy_Tensorflow_Keras_Neural Network - Fatal编程技术网

我想实现一个多层神经网络,但我得到的错误是大小为1的数组可以转换为python标量

我想实现一个多层神经网络,但我得到的错误是大小为1的数组可以转换为python标量,python,numpy,tensorflow,keras,neural-network,Python,Numpy,Tensorflow,Keras,Neural Network,我想实现一个多层神经网络,但是我在keras的输入层得到了一个错误,大小为1的数组只能转换成python标量, 代码如下: from keras.models import Sequential from keras.layers import Activation from keras import backend as K from keras.layers.core import Dense from keras.optimizers import SGD from keras.met

我想实现一个多层神经网络,但是我在keras的输入层得到了一个错误,大小为1的数组只能转换成python标量, 代码如下:

from keras.models import Sequential

from keras.layers import Activation

from keras import backend as K
from keras.layers.core import Dense
from keras.optimizers import SGD
from keras.metrics import categorical_crossentropy
import numpy as np
import cv2
import os
from random import randint
import matplotlib.pyplot as plt
        #Loading the images
DataDir= r"E:\FYP\images_datasets\Training Data"
Categories=["Badshahi-Mosque"]
for category in Categories:
    path=os.path.join(DataDir,category)
    for img in os.listdir(path):
        img_arr=cv2.imread(os.path.join(path,img),cv2.IMREAD_GRAYSCALE)
        plt.imshow(img_arr,cmap="gray")
        break
    break
    #Resizing the image
IMG_SIZE=(124,124)
new_array=cv2.resize(img_arr,(IMG_SIZE))
plt.imshow(new_array,cmap="gray")
plt.show()
print(new_array.shape)
training_data=[]
class_num1=[]
    #Training the data
def create_training_data():
    for category in Categories:
        path=os.path.join(DataDir,category)
        class_num=Categories.index(category)
        for img in os.listdir(path):
            try:
                img_arr=cv2.imread(os.path.join(path,img))
                new_array=cv2.resize(img_arr,(IMG_SIZE))
                training_data.append([new_array,class_num])
                class_num1.append([class_num])
            except Exception as e:
                pass
create_training_data()
print("Length of the training data is:",len(training_data))
classes = np.unique(class_num1)
nClasses = len(classes)
print('Total number of outputs : ', nClasses)
print('Output classes being able to be classified: ', classes)
import random
random.shuffle(training_data)
for i in training_data[:5]:
     print("Labeling values before on hot enc are:",i[1])
import numpy as np
X=[]
train_labels=[]#One hot encoding values
train_data=[]#Floating values
trained_data=[]#Scalar and floating values
for features,lab in training_data:
    X.append(features)
    train_labels.append(lab)
for i in X:
    train_data = i.astype('float32')
# print("Train data",train_data)
training_data1=[]
for i in train_data:
        trained_data= (i - np.min(i)) / (np.max(i) - np.min(i))
        training_data1=np.array(trained_data).ravel()
# print("Trained data",training_data1)
from tensorflow.keras import utils as np_utils
train_labels = np_utils.to_categorical(train_labels)
# print(train_labels)enter code here
model = Sequential()
model.add(Dense(units=15376,input_shape=(training_data1,),activation='relu'))

错误发生在输入形状的最后一层上面,为什么会发生此错误,我的图片大小调整后的形状是124*124,

正如错误所示,问题在于
输入形状

要修复错误,可以替换代码

model.add(Dense(units=15376,input_shape=(training_data1,),activation='relu'))

除此之外,您还可以通过替换

for i in X:
    train_data = i.astype('float32')
# print("Train data",train_data)
training_data1=[]
for i in train_data:
        trained_data= (i - np.min(i)) / (np.max(i) - np.min(i))
        training_data1=np.array(trained_data).ravel()

完整的工作代码如下所示:

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Activation

from tensorflow.keras import backend as K
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.metrics import categorical_crossentropy
import numpy as np
import cv2
import os
from random import randint
import matplotlib.pyplot as plt

#Loading the images
DataDir= r"E:\FYP\images_datasets\Training Data"

Categories=["Badshahi-Mosque"]

for category in Categories:
    path=os.path.join(DataDir,category)
    for img in os.listdir(path):
        img_arr=cv2.imread(os.path.join(path,img),cv2.IMREAD_GRAYSCALE)
        plt.imshow(img_arr,cmap="gray")
        break
    break

#Resizing the image
IMG_SIZE=(124,124)
new_array=cv2.resize(img_arr,(IMG_SIZE))
plt.imshow(new_array,cmap="gray")
plt.show()
print(new_array.shape)
training_data=[]
class_num1=[]

#Training the data
def create_training_data():
    for category in Categories:
        path=os.path.join(DataDir,category)
        class_num=Categories.index(category)
        for img in os.listdir(path):
            try:
                img_arr=cv2.imread(os.path.join(path,img))
                new_array=cv2.resize(img_arr,(IMG_SIZE))
                training_data.append([new_array,class_num])
                class_num1.append([class_num])
            except Exception as e:
                pass
create_training_data()
print("Length of the training data is:",len(training_data))
classes = np.unique(class_num1)
nClasses = len(classes)
print('Total number of outputs : ', nClasses)
print('Output classes being able to be classified: ', classes)

print(training_data[0][1])

import random
random.shuffle(training_data)
for i in training_data[:5]:
     print("Labeling values before on hot enc are:",i[1])
import numpy as np

X=[]
train_labels=[]#One hot encoding values
train_data=[]#Floating values
trained_data=[]#Scalar and floating values
for features,lab in training_data:
    X.append(features)
    train_labels.append(lab)
temp = 0

X = np.array(X, dtype = 'float32')

X = (X - np.min(X))/(np.max(X) - np.min(X))

from tensorflow.keras import utils as np_utils
train_labels = np_utils.to_categorical(train_labels)
# print(train_labels)enter code here
model = Sequential()
model.add(Dense(units=15376,input_shape=(X.shape[0], X.shape[1], X.shape[2], X.shape[3]),activation='relu'))

希望这有帮助。学习愉快

请共享整个错误消息。
X = np.array(X, dtype = 'float32')

X = (X - np.min(X))/(np.max(X) - np.min(X))
from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Activation

from tensorflow.keras import backend as K
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.metrics import categorical_crossentropy
import numpy as np
import cv2
import os
from random import randint
import matplotlib.pyplot as plt

#Loading the images
DataDir= r"E:\FYP\images_datasets\Training Data"

Categories=["Badshahi-Mosque"]

for category in Categories:
    path=os.path.join(DataDir,category)
    for img in os.listdir(path):
        img_arr=cv2.imread(os.path.join(path,img),cv2.IMREAD_GRAYSCALE)
        plt.imshow(img_arr,cmap="gray")
        break
    break

#Resizing the image
IMG_SIZE=(124,124)
new_array=cv2.resize(img_arr,(IMG_SIZE))
plt.imshow(new_array,cmap="gray")
plt.show()
print(new_array.shape)
training_data=[]
class_num1=[]

#Training the data
def create_training_data():
    for category in Categories:
        path=os.path.join(DataDir,category)
        class_num=Categories.index(category)
        for img in os.listdir(path):
            try:
                img_arr=cv2.imread(os.path.join(path,img))
                new_array=cv2.resize(img_arr,(IMG_SIZE))
                training_data.append([new_array,class_num])
                class_num1.append([class_num])
            except Exception as e:
                pass
create_training_data()
print("Length of the training data is:",len(training_data))
classes = np.unique(class_num1)
nClasses = len(classes)
print('Total number of outputs : ', nClasses)
print('Output classes being able to be classified: ', classes)

print(training_data[0][1])

import random
random.shuffle(training_data)
for i in training_data[:5]:
     print("Labeling values before on hot enc are:",i[1])
import numpy as np

X=[]
train_labels=[]#One hot encoding values
train_data=[]#Floating values
trained_data=[]#Scalar and floating values
for features,lab in training_data:
    X.append(features)
    train_labels.append(lab)
temp = 0

X = np.array(X, dtype = 'float32')

X = (X - np.min(X))/(np.max(X) - np.min(X))

from tensorflow.keras import utils as np_utils
train_labels = np_utils.to_categorical(train_labels)
# print(train_labels)enter code here
model = Sequential()
model.add(Dense(units=15376,input_shape=(X.shape[0], X.shape[1], X.shape[2], X.shape[3]),activation='relu'))