简体   繁体   English

使用 Tensorflow/Keras 运行图像分类 model 时出现 ValueError

[英]ValueError when running image classification model with Tensorflow/Keras

me and my partner are making a model that classifies a given image as wearing a mass correctly or incorrectly.我和我的搭档正在制作一个 model,它将给定的图像分类为正确或错误地佩戴肿块。 When we try to run our model, a ValueError pops up.当我们尝试运行 model 时,会弹出 ValueError。 We're both beginners in learning Keras and Tensorflow, so please cut a bit of slack on us.我们都是学习 Keras 和 Tensorflow 的初学者,所以请稍稍放松一下。 We're using Jupyter notebook to run our model.我们使用 Jupyter notebook 来运行我们的 model。 Please tell us if you need more info.如果您需要更多信息,请告诉我们。

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

X = pickle.load(open('X.pickle','rb'))
y = pickle.load(open('y.pickle', 'rb'))

model = Sequential()

model.add(Conv2D(128, (6, 6), input_shape=X.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(128, (4, 4)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())

model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])

model.fit(X, y, batch_size=32, epochs=4, validation_split=0.3)

Here's the output:这是 output:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-f184ee158893> in <module>
     29              metrics=['accuracy'])
     30 
---> 31 model.fit(X, y, batch_size=32, epochs=4, validation_split=0.3)

/Users/user/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, max_queue_size, workers, use_multiprocessing, **kwargs)
   1534         steps_name='steps_per_epoch',
   1535         steps=steps_per_epoch,
-> 1536         validation_split=validation_split)
   1537 
   1538     # Prepare validation data.

/Users/user/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split)
    990         x, y, sample_weight = next_element
    991     x, y, sample_weights = self._standardize_weights(x, y, sample_weight,
--> 992                                                      class_weight, batch_size)
    993     return x, y, sample_weights
    994 

/Users/user/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in _standardize_weights(self, x, y, sample_weight, class_weight, batch_size)
   1152           feed_output_shapes,
   1153           check_batch_axis=False,  # Don't enforce the batch size.
-> 1154           exception_prefix='target')
   1155 
   1156       # Generate sample-wise weight values given the `sample_weight` and

/Users/user/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    321                            ': expected ' + names[i] + ' to have ' +
    322                            str(len(shape)) + ' dimensions, but got array '
--> 323                            'with shape ' + str(data_shape))
    324         if not check_batch_axis:
    325           data_shape = data_shape[1:]

ValueError: Error when checking target: expected activation_11 to have 2 dimensions, but got array with shape (11504, 100, 100, 3)

if your example got 2 classes just add a dense layer with one unit between your 2 last layers如果您的示例有 2 个类,只需在最后 2 个层之间添加一个具有一个单元的密集层

model.add(Flatten())

#Add this
model.add(Dense(1))

model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM