【问题标题】:My neural network gives an error and I don't know why我的神经网络出错了,我不知道为什么
【发布时间】:2021-10-15 11:11:02
【问题描述】:

我对神经网络编程相对较新,并且在决定尝试使用我所学的知识自行学习对神经网络进行编程之前,我一直在学习一些关于它的教程。我一直在尝试编写一个基本的神经网络,以便我可以了解它是如何工作的,但它一直给我一个错误。如果有人可以提供帮助,我将不胜感激。

这是我的代码:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D

import pickle

pickle_in = open("X.pickle","rb")
X = pickle.load(pickle_in)

pickle_in = open("y.pickle","rb")
y = pickle.load(pickle_in)

X = X/255.0

model = Sequential()
model.add(Conv2D(8,(5, 5),padding="same",activation='relu',input_shape=(784,)))
model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(Flatten())
model.add(Dense(1))
model.add(Activation('linear'))
model.add(Dense(y.shape[1]))
model.add(Activation('linear'))

model.summary()
model.compile(loss='mean_squared_error',optimizer='adam',metrics=['mae','mse', 'accuracy'])

model.fit(X, y, epochs=20, batch_size=10,verbose=2)

这是我收到的错误消息:

str(x.shape.as_list()))
ValueError: Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [None, 784]

提前致谢!

【问题讨论】:

    标签: python tensorflow machine-learning keras neural-network


    【解决方案1】:

    错误是因为 Conv2D 期望输入形状为 4 维,即 [batch_size, height, width, channels]。您可以做一件事,即重塑您对模型的输入。

    X = X.reshape(-1, 28, 28, 1) # incase of single channel (grayscale)
    # OR
    X = X.reshape(-1, 28, 28, 3) # incase of RGB
    # and then change the input shape of your `Conv2D` layer accordingly to
    model = Sequential()
    model.add(Conv2D(8,(5, 5),padding="same",activation='relu',input_shape=(28,28,1)))
    # OR
    model = Sequential()
    model.add(Conv2D(8,(5, 5),padding="same",activation='relu',input_shape=(28,28,3)))
    

    【讨论】:

    • 我尝试了您的建议,但收到错误“ValueError: cannot reshape array of size 40 into shape (28,28,1)”有什么建议吗?
    • 分享X.shape的输出
    • X.shape 似乎等于 (10, 4)
    • 那么你的数据集不正确。您需要从您获取数据的地方交叉检查您的数据。此外,您的数据集应该由图像组成。对吗?
    • @AbhishekPrajapat 请不要使用外部聊天服务,因为这完全违背了 Stack Overflow 的目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2019-07-02
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多