【发布时间】:2021-05-08 10:23:22
【问题描述】:
我和我的搭档正在制作一个模型,该模型将给定的图像分类为正确或错误地佩戴了肿块。当我们尝试运行我们的模型时,会弹出一个 ValueError。我们都是学习 Keras 和 Tensorflow 的初学者,所以请放慢我们的脚步!我们使用 Jupyter notebook 来运行我们的模型。如果您需要更多信息,请告诉我们。
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)
这是输出:
---------------------------------------------------------------------------
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)
【问题讨论】:
-
能否提供X和y的形状
-
压扁后没有浓密。添加一个具有 1 个神经元的密集层。
-
你有多少图像类?
-
只有两节课。问题已解决,谢谢大家!
标签: python tensorflow machine-learning keras deep-learning