问题描述
我是 ML 的新手,所以我真的不知道在做什么我不知道 logits 在代码中的含义我什至没有编写 logits 我只是按照 YouTube 教程来让我自己熟悉环境。 .这是完整的代码,感谢您的帮助。我知道在stackoverflow上已经有这种帖子,但我认为它不适用于我的情况,也许我不知道,但我仍然不知道知道如何实施它,即使这样做也请帮助我在这里挣扎:) tnx 代码:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
from tensorflow.keras.optimizers import RMSprop
import matplotlib.pyplot as plt
import tensorflow as tf
import cv2
import os
import numpy as np
img = cv2.imread("/content/drive/MyDrive/data/train/ha/2.jpg").shape
print(img)
imgg = image.load_img("/content/drive/MyDrive/data/train/ha/2.jpg")
plt.imshow(imgg)
train = ImageDataGenerator(rescale=1/255)
validation = ImageDataGenerator(rescale=1/255)
train_dataset = train.flow_from_directory("/content/drive/MyDrive/data/train/",target_size = (100,100),batch_size = 3,class_mode ="binary")
print(train_dataset.class_indices)
validation_dataset = train.flow_from_directory("/content/drive/MyDrive/data/validate/",class_mode ="binary")
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(16,(3,3),activation = 'relu',input_shape =(200,200,3)),tf.keras.layers.MaxPool2D(2,2),#
tf.keras.layers.Conv2D(32,activation = 'relu'),#
tf.keras.layers.Conv2D(64,##
tf.keras.layers.Dense(134,##
tf.keras.layers.Dense(1,activation = 'sigmoid')
])
model.compile(loss = 'binary_crossentropy',optimizer = RMSprop(lr=0.001),metrics =['accuracy'])
model_fit = model.fit(train_dataset,steps_per_epoch = 3,epochs = 1,validation_data = validation_dataset)
错误:
2021-01-01 13:39:18.588397: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1
(51,51,3)
Found 9 images belonging to 2 classes.
{'ha': 0,'hu': 1}
Found 4 images belonging to 2 classes.
2021-01-01 13:39:22.999078: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices,tf_xla_enable_xla_devices not set
2021-01-01 13:39:23.026197: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-01-01 13:39:23.092853: E tensorflow/stream_executor/cuda/cuda_driver.cc:328] Failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-01-01 13:39:23.092917: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (6e4fde799083): /proc/driver/nvidia/version does not exist
2021-01-01 13:39:23.093374: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices,tf_xla_enable_xla_devices not set
2021-01-01 13:39:23.846859: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)
2021-01-01 13:39:23.850373: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] cpu Frequency: 2300000000 Hz
Traceback (most recent call last):
File "/content/drive/MyDrive/main.py",line 48,in <module>
validation_data = validation_dataset)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py",line 1100,in fit
tmp_logs = self.train_function(iterator)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py",line 828,in __call__
result = self._call(*args,**kwds)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py",line 871,in _call
self._initialize(args,kwds,add_initializers_to=initializers)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py",line 726,in _initialize
*args,**kwds))
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py",line 2969,in _get_concrete_function_internal_garbage_collected
graph_function,_ = self._maybe_define_function(args,kwargs)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py",line 3361,in _maybe_define_function
graph_function = self._create_graph_function(args,line 3206,in _create_graph_function
capture_by_value=self._capture_by_value),File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py",line 990,in func_graph_from_py_func
func_outputs = python_func(*func_args,**func_kwargs)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py",line 634,in wrapped_fn
out = weak_wrapped_fn().__wrapped__(*args,**kwds)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py",line 977,in wrapper
raise e.ag_error_Metadata.to_exception(e)
ValueError: in user code:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:805 train_function *
return step_function(self,iterator)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:795 step_function **
outputs = model.distribute_strategy.run(run_step,args=(data,))
/usr/local/lib/python3.6/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.6/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.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
return fn(*args,**kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:788 run_step **
outputs = model.train_step(data)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:756 train_step
y,y_pred,sample_weight,regularization_losses=self.losses)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/compile_utils.py:203 __call__
loss_value = loss_obj(y_t,y_p,sample_weight=sw)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/losses.py:152 __call__
losses = call_fn(y_true,y_pred)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/losses.py:256 call **
return ag_fn(y_true,**self._fn_kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
return target(*args,**kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/losses.py:1608 binary_crossentropy
K.binary_crossentropy(y_true,from_logits=from_logits),axis=-1)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
return target(*args,**kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py:4979 binary_crossentropy
return nn.sigmoid_cross_entropy_with_logits(labels=target,logits=output)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
return target(*args,**kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_impl.py:174 sigmoid_cross_entropy_with_logits
(logits.get_shape(),labels.get_shape()))
ValueError: logits and labels must have the same shape ((None,23,1) vs (None,1))
解决方法
您的问题是密集层的输入必须是向量。为了实现这一点
you can
replace tf.keras.layers.MaxPool2D(2,2)
with tf.keras.layers.GlobalMaxPooling2D()
或者只是添加
tf.keras.layers.GlobalMaxPooling2D() after tf.keras.layers.MaxPool2D(2,2)