首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试拟合模型时出错- Tensorflow CNN

尝试拟合模型时出错- Tensorflow CNN
EN

Stack Overflow用户
提问于 2022-07-12 09:29:06
回答 1查看 58关注 0票数 1

我试图创建一个CNN图像分类(猫和狗)。一切都很顺利,直到我恢复健康为止。由于我是一个初学者,我担心我没有正确地创建我的顺序模型。我也不确定我的每一个时期的步骤和验证步骤是否正确。

当我使用history =model.fit时,会得到以下错误:

代码语言:javascript
运行
复制
2022-07-12 12:10:04.374122: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)
Epoch 1/15
2022-07-12 11:57:57.465865: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)>
2022-07-12 11:57:58.808025: I tensorflow/stream_executor/cuda/cuda_dnn.cc:369] Loaded cuDNN version 8201
2022-07-12 11:58:00.536214: W tensorflow/core/framework/op_kernel.cc:1680] Invalid argument: required broadcastable shapes
2022-07-12 11:58:00.536457: W tensorflow/core/framework/op_kernel.cc:1680] Invalid argument: required broadcastable shapes
2022-07-12 11:58:00.536536: W tensorflow/core/framework/op_kernel.cc:1680] Invalid argument: required broadcastable shapes
Traceback (most recent call last):
  File "C:\Users\myPC\PycharmProjects\pythonProject\catsdogs.py", line 75, in <module>
    history = model.fit(train_data_gen, epochs=epochs, validation_data=val_data_gen, steps_per_epoch=int(np.ceil(train_data_gen.n / float(batch_size))), validation_steps=int(np.ceil(val_data_gen.n / float(batch_size))))
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training.py", line 1184, in fit
    tmp_logs = self.train_function(iterator)
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\def_function.py", line 885, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\def_function.py", line 950, in _call
    return self._stateless_fn(*args, **kwds)
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\function.py", line 3039, in __call__
    return graph_function._call_flat(
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\function.py", line 1963, in _call_flat
    return self._build_call_outputs(self._inference_function.call(
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\function.py", line 591, in call
    outputs = execute.execute(
  File "C:\Users\myPC\anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\execute.py", line 59, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError:  required broadcastable shapes
     [[node Equal (defined at \PycharmProjects\pythonProject\catsdogs.py:75) ]] [Op:__inference_train_function_733]

Function call stack:
train_function

2022-07-12 11:58:00.649539: W tensorflow/core/kernels/data/generator_dataset_op.cc:107] Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated.
     [[{{node PyFunc}}]]

Process finished with exit code 1>

这是我使用的代码(Tensorflow版本为2.6):

代码语言:javascript
运行
复制
import tensorflow as tf
import keras

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPool2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator

import os
import numpy as np
import matplotlib.pyplot as plt

# GET PROJECT FILES
PATH = 'cats_and_dogs'

train_dir = os.path.join(PATH, 'train')
validation_dir = os.path.join(PATH, 'validation')
test_dir = os.path.join(PATH, 'test')

# GET NUMBER OF FILES IN EACH DIRECTORY
total_train = sum([len(files) for r, d, files in os.walk(train_dir)])
total_val = sum([len(files) for r, d, files in os.walk(validation_dir)])
total_test = len(os.listdir(test_dir))

# VARIABLES FOR PRE-PROCESSING AND TRAINING.
batch_size = 128
epochs = 15
IMG_HEIGHT = 150
IMG_WIDTH = 150

# CREATE IMAGE DATA GENERATORS
train_image_generator = ImageDataGenerator(rotation_range=0.5, zoom_range=0.2, horizontal_flip=True, vertical_flip=True,
                                           rescale=1. / 255)
validation_image_generator = ImageDataGenerator(rescale=1. / 255)
test_image_generator = ImageDataGenerator(rescale=1. / 255)

train_data_gen = train_image_generator.flow_from_directory(directory=train_dir, target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                           class_mode='binary', batch_size=batch_size)
val_data_gen = validation_image_generator.flow_from_directory(directory=validation_dir,
                                                              target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                              class_mode='binary', batch_size=batch_size)
test_data_gen = test_image_generator.flow_from_directory(directory=test_dir, target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                         class_mode='binary', batch_size=batch_size,
                                                         shuffle=False)


# CREATE MODEL
model = Sequential(
    [
        Conv2D(32, (3, 3), input_shape=(IMG_WIDTH, IMG_HEIGHT, 3)),
        MaxPool2D((2, 2)),
        Dense(1, activation='relu')
    ]
)

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=['accuracy'])

model.summary()
history = model.fit(train_data_gen, epochs=epochs, validation_data=val_data_gen, steps_per_epoch=int(np.ceil(train_data_gen.n / float(batch_size))), validation_steps=int(np.ceil(val_data_gen.n / float(batch_size))))

我觉得required broadcastable shapes是罪魁祸首,但我可能错了。

EN

Stack Overflow用户

回答已采纳

发布于 2022-07-21 06:26:54

经过一番研究,我终于让它在pyCharm中发挥作用了。问题是我没有用扁的。这是我修改的代码的一部分。现在很好用。我仍然不知道为什么它不会给我一个错误,但在科拉布。

代码语言:javascript
运行
复制
model = Sequential(
    [
        keras.Input(shape=(IMG_WIDTH, IMG_HEIGHT, 3)),
        Conv2D(32, 3, padding='same', activation='relu'),
        MaxPooling2D(),
        Conv2D(64, 3, activation='relu'),
        MaxPooling2D(),
        Conv2D(128, 3, activation='relu'),
        Flatten(),
        Dense(64, activation='relu'),
        Dropout(0.5),
        Dense(1, activation='sigmoid')
    ]
)

model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=3e-4),
    loss=keras.losses.BinaryCrossentropy(),
    metrics=["accuracy"]
)

model.summary()
history = model.fit(train_data_gen, epochs=epochs, validation_data=val_data_gen, batch_size=batch_size, verbose=2)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72950056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档