- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是使用 CNN 的初学者。
所以,我正在构建一个预测脑肿瘤类型的 2D 卷积神经网络,并对 NumPy 数组有一个疑问。我的模型的输入形状是 (1, 512, 512) as (channels, img_height, img_width)。第四个维度是 num_images,它似乎是由 TensorFlow 自动定义的。这只是一个快速背景。我有 3064 个“.mat”扩展文件,其中包含脑肿瘤的 MRI 扫描。一切都已设置完毕。我将“.mat”文件转换为 numpy 矩阵,并将整个矩阵列表附加到单个 numpy 数组中,以作为 CNN 的输入传递。我还有相应的标签(将输入传递到模型时索引链接到图像)作为 numpy 数组。图像和标签中的所有数字都是浮点类型。
同样,我的输入形状是 (1, 512, 512)。但是,在拟合模型时出现以下错误:
ValueError:检查输入时出错:预期 conv2d_130_input 的形状为 (1, 512, 512),但得到的数组形状为 (79, 512, 512)
因此,我对 NumPy 数组进行切片以创建 train_images、train_labels、test_images、test_labels。我已经验证了每个训练集和测试集的长度与标签匹配。它们也是数组,我检查了多次。这是一个值(value)错误。那么,我该如何解决这个问题呢?
我什至不知道输入形状变成了哪里(79,512,512)。我有一个循环将 f"{n}.mat"图像转换为矩阵。我使用 100 张图像进行测试,并进行 80 个训练和 20 个测试。我认为错误就在这里,输入形状是( channel ,img-hght,img-wdth),但是剩下要训练的图像数量被放置在 channel 的值中。因此,输入被放置为 (num_images, img-hght, img-wdth)。这是错误的,应该改变,但我不知道该怎么做。或者,我可能是错的,我所说的可能没有意义。我提供所有代码,并在 Colab 上运行。如果您下载代码并想要运行它,请确保更改图像路径以帮助我。非常感谢!
数据集:https://figshare.com/articles/brain_tumor_dataset/1512427/5
#Importing the necessary libraries through PIP to the Virtual Environment
try:
!python -m pip install --upgrade pip #Quickly update PIP to latest version
!python -m pip install pymatreader
!python -m pip install pyswarm #An interesting library for testing purposes
print("""
The following libraries are available and have been successfully fetched:
>>> PyMatReader
>>> Particle Swarm""")
except Exception:
print("""
The following libraries have unavailable and have not been fetched:
>>> PyMatReader
>>> Particle Swarm""")
pass
#Importing the necessary libraries to the Virtual Environment
from __future__ import absolute_import, division, print_function, unicode_literals
import random as rnd
from random import shuffle
import numpy as np
import sys
import scipy as sp
from scipy.ndimage import gaussian_filter
import pymatreader as pym
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.image as mplimg
import matplotlib.pyplot as plt
import PIL
from PIL import Image
import imageio
import sklearn as sk
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import image
import sklearn.metrics as skm
print("""
The following libraries have been successfully imported:
>>> Future
>>> Random (with shuffle)
>>> NumPy
>>> System
>>> SciPy (with gaussian filter)
>>> PyMatReader
>>> Pandas
>>> Seaborn
>>> Matplotlib (with PyPlot & Image)
>>> PIL (with Image)
>>> Imageio
>>> Sci-Kit Learn (with metrics & train_test_split)
>>> Sci-kit Learn Feature Extraction (with Image)
""")
try:
%tensorflow_version 2.x
import keras
import tensorflow as tf
print("TensorFlow version 2.x is available and has been successfully imported.")
except Exception:
%tensorflow_version 1.x
import keras
import tensorflow as tf
print("TensorFlow version 2.x is unavailable. TensorFlow version 1.x has been imported instead.")
pass
from tensorflow.keras import datasets, layers, models
import keras.preprocessing
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from keras.optimizers import Adam
import pyswarm
from pyswarm import pso
autoTune = tf.data.experimental.AUTOTUNE
print("""
The following deep learning optimizers have been successfully imported:
>>> Adam
>>> Particle Swarm (with pso)
""")
print("All libraries have been successfully imported.")
#Understanding the Image Data using Seaborn and Matplotlib
classNames = {1 : "Meningioma", 2 : "Glioma", 3 : "Pituitary Tumor", 4 : "Unkown", 5 : "Unkown"}
outputSize = len(classNames)
chooseImgNum = 2978
example = pym.read_mat(f'/content/gdrive/My Drive/My Files/Neuroimaging/Neuroimaging Datasets/MATLAB Files/{chooseImgNum}.mat')
cjdata = example['cjdata']
pid = cjdata['PID']
img = cjdata['image']
label = cjdata['label']
tumorBorder = cjdata['tumorBorder']
tumorMask = cjdata['tumorMask']
print("Tumor Border is: \n", tumorBorder, "\n")
print("Tumor Mask is: \n", tumorMask, "\n")
def printImage():
plt.figure(figsize=(5, 5))
plt.imshow(img, cmap=None)
def matrixConv(): #Data Visualization only
matrix = np.asmatrix(tumorBorder)
plt.figure(figsize=(5, 5))
return matrix
def applyGrayscale():
plt.figure(figsize=(5, 5))
plt.imshow(img, cmap='gray')
print("""
Below is the original image followed by a grayscale application:
____________________________________________________________________________
""")
printImage()
applyGrayscale()
#Preprocessing Brain Images from Dataset
range1 = np.arange(0, 100)
imgMatrices = []
imgNum = 1
i = 1
while imgNum in range1:
imgNum = pym.read_mat(f'/content/gdrive/My Drive/My Files/Neuroimaging/Neuroimaging Datasets/MATLAB Files/{imgNum}.mat')
cjdata = imgNum['cjdata']
imgMatrix = cjdata['image']
# plt.figure(figsize=(5, 5))
# plt.imshow(image_matrix, cmap='gray')
imgMatrixNP = np.asmatrix(imgMatrix)
imgArrayNP = np.asarray(imgMatrixNP)
imgMatrices.append(imgArrayNP)
imgNum = i
i = i + 1
print("The length of the image input list is:", len(imgMatrices))
imgMatricesNP = np.asarray(imgMatrices)
print("The length of the converted image input array is:", len(imgMatricesNP), "\n")
print("The image input array:")
imgMatricesNP #Prints the raw array
#Supervised Learning: Understanding Cancer Type labels
np.set_printoptions(threshold=3)
#np.set_printoptions(threshold=sys.maxsize) #To check the content of the entire array
rawMatData = pym.read_mat('/content/gdrive/My Drive/My Files/Neuroimaging/Neuroimaging Datasets/cvind.mat')
print("Labels file in \".mat\" format converted to dictionary format:", rawMatData)
matDataList = list(rawMatData.values())
print("Labels converted to list format:", matDataList)
matDataArray = np.asarray(matDataList)
print("Labels converted to array format:", matDataArray, "\n")
shapedMatDataArray = matDataArray.reshape(-1, 3064, 1)
print("Reshaped labels in array format:\n", shapedMatDataArray, "\n")
matData = pd.DataFrame(matDataArray)
print("Labels converted to a Pandas DataFrame:")
matData #Prints out the DataFrame
#Viewing labels based on image number
def imgLabelCheck(n):
callback = matData.at[0, n-1]
print(f"Image Number {n} has the following Cancer Type: {classNames[callback]}.")
return
pickImg = 1 #Choose an image number to look for its Cancer Type
imgLabelCheck(pickImg)
#Preparing the Datasets: Looping Train Set & Test Set
print("___________________________________________________________________________________\n")
train_images = np.array([imgMatricesNP[0:79]])
print("Training images range is:\n", train_images, "\n")
uppTrBn = len(train_images)
loqTrRng = 0
uppTrRng = 79
train_labels = np.asarray(matData.loc[:, loqTrRng:uppTrRng], dtype=float, order='A')
print("Training labels range is:", train_labels)
print("___________________________________________________________________________________\n")
test_images = np.array([imgMatricesNP[80:100]])
print("Testing images range is: \n", test_images, "\n")
uppTsBn = len(test_images)
loqTsRng = 80
uppTsRng = 100
test_labels = np.asarray(matData.loc[:, loqTsRng:uppTsRng], dtype=float, order='A')
print("Testing labels range is:", test_labels)
print("___________________________________________________________________________________")
#train_labels #Verify if the ranges are in fact NumPy arrays
#test_labels
#Defining the Convolutional Neural Network
model = models.Sequential()
model.add(layers.Conv2D(512, (3, 3), activation='relu', data_format="channels_first", input_shape=(1, 512, 512))) #The Input Layer
#model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.MaxPooling2D((2, 2), padding='same')) #MaxPooling Layer 1
model.add(layers.Conv2D(1024, (3, 3), activation='relu', padding='same')) #Hidden Convolutional Layer 1
model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.MaxPooling2D((2, 2), padding='same')) #MaxPooling Layer 2
model.add(layers.Conv2D(1024, (3, 3), activation='relu', padding='same')) #Hidden Convolutional Layer 2
#model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.MaxPooling2D((2, 2), padding='same')) #MaxPooling Layer 3
model.add(layers.Conv2D(1024, (3, 3), activation='relu', padding='same')) #Hidden Convolutional Layer 3
model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.MaxPooling2D((2, 2), padding='same')) #MaxPooling Layer 4
model.add(layers.Conv2D(1024, (3, 3), activation='relu', padding='same')) #Hidden Convolutional layer 4
#model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.MaxPooling2D((2, 2), padding='same')) #MaxPooling Layer 5
model.add(layers.Conv2D(1024, (3, 3), activation='relu', padding='same')) #Hidden Convolutional Layer 5
model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.MaxPooling2D((2, 2), padding='same')) #MaxPooling Layer 6
model.add(layers.Conv2D(1024, (3, 3), activation='relu', padding='same')) #Hidden Convolutional Layer 6
#model.add(layers.Dropout(0.5, noise_shape=None, seed=None)) #Optional Dropout Layer
model.add(layers.Flatten()) #The Flattening Layer
model.add(layers.Dense(512, activation='relu')) #Dense Layer 1
model.add(layers.Dense(256, activation='relu')) #Dense Layer 2
model.add(layers.Dense(128, activation='relu')) #Dense Layer 3
model.add(layers.Dense(64, activation='relu')) #Dense Layer 4
model.add(layers.Dense(32, activation='relu')) #Dense Layer 5
model.add(layers.Dense(16, activation='relu')) #Dense Layer 6
model.add(layers.Dense(outputSize, activation='softmax')) #The Output Layer
model.summary()
#Compiling the Convolutional Neural Network with an Optimizer
#The Adam Optimizer is ideal for biological image classification.
#The Optimizer automatically performs forward and backward propagation.
model.compile(
optimizer='Adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'],
loss_weights=None,
sample_weight_mode=None,
weighted_metrics=None,
target_tensors=None
)
print("The Neuroimaging Model has been successfully compiled.")
#Training the Convolutional Neural Network
history = model.fit(train_images, train_labels, epochs=10, batch_size=1, verbose=1,
validation_data=(test_images, test_labels))
print("\nThe Neuroimaging Model has been successfully trained.")
此页面上的每个代码框代表 Colab 或 Jupyter 笔记本的单个代码单元。再次欢迎并感谢所有帮助! (该模型尚未完全构建,但添加层仅用于实验。
最佳答案
添加行:
train_images = np.reshape(train_images, (-1,1,512,512))
在代码中的以下行之后
train_images = np.array([imgMatricesNP[0:79]])
获取单个图像的 input_shape=(1, 512, 512)
而不是 (79, 512, 512)
,因为模型期望的输入形状为(1, 1, 512, 512)
(根据尺寸(batch_size、 channel 、高度、宽度)),而您当前的代码提供的输入形状为 (1、79、512、512)。如果您有足够的计算资源,请将batch_size增加到
p>8
(比如说),这样您的总输入形状将为(8, 1, 512, 512)
。
此外,对 test_images
执行类似的操作:
test_images = np.reshape(test_images, (-1,1,512,512))
行后:
test_images = np.array([imgMatricesNP[80:100]])
PS:此外,您的意图似乎是从输入 imgMatricesNP
中分割前 80 个图像。但是,使用 imgMatricesNP[0:79]
,您只能获得前 79 个图像(因为 Python 中排除了切片的最后一个索引)。因此,更正为:
train_images = np.array([imgMatricesNP[0:80]])
并分配uppTrRng=80
。
希望这有帮助! :)
关于python - 如何修复 : ValueError: Error when checking input: expected conv2d_130_input to have shape (1, 512, 512) 但得到形状为 (79, 512, 512) 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133220/
我正在处理 ILGenerator使用 Expression 帮助发射 IL 片段的扩展.一切都很好,直到我处理整数转换部分。有些东西对我来说确实违反直觉,例如: 使用 conv.i8转换 Int32
我希望使用 Google 操作在 Firebase 函数的对话中创建一个 super 简单的计数器。 documentation推荐: app.intent('Default Welcome Inte
我有一些代码可以将数字从十六进制转换为十进制,并检查是否大于或等于。今天,我发现这并不总是有效,我也不知道为什么。 我试过使用原始值,效果很好。比较工作之外的转换。 select case when
我目前正在尝试理解卷积神经网络中的权重共享到底是什么。 据我所知,CNN 最初是作为一种减少连接输入和输出所需的连接数量的方法引入的,因为输入具有 3 个维度。 按照这个逻辑,卷积减少其中一个维度,并
本文Let there be Color!实现CNN,属性如下: 图片大小:224x224 内核大小:3X3 步幅:2X2 填充:1x1 在论文中,他们提到输出层大小为 112X112 但使用公式 N
我正在使用卷积网络进行图像分类。 理论上有一些东西我不明白 对于训练,我将数据分为 60% 训练/20% 验证/20% 测试 当验证集上的指标最好时,我会节省重量(我在训练和验证集上具有相同的性能)。
我正在尝试实现 cyclegan。然而,即使在 10 或 25 个 epoch 之后,我生成的图像上似乎总是出现白点。我想知道可能出了什么问题?我应该继续训练,问题就会消失吗?或者有任何关于如何解决这
我是 keras 的新手。 我在一个数据集上运行它,我的目标是减少 logloss。 对于每个时代,它都给我相同的损失值。我很困惑我是否在正确的轨道上。 例如: Epoch 1/5 91456/914
我用较小的数据集训练了以下 CNN 模型,因此它确实过拟合: model = Sequential() model.add(Conv2D(32, kernel_size=(3,3), input_sh
问题How to initialize weights in PyTorch?显示如何初始化 Pytorch 中的权重.但是,Conv 的默认权重初始值设定项是什么?和 Dense在 Pytorch
我找不到任何关于 YOLOv3 SPP 更好的解释 mAP比 YOLOv3。作者本人在他的 repo 中将 YOLOv3 SPP 声明为: YOLOv3 with spatial pyramid po
我发现在(彩色)imagenet 数据库(如 .npy)上预训练的 VGG16 网络。是否有在可用的 imagenet 数据库灰度版本上预训练的 VGG16 网络? (在灰色 1 channel 输入
CNN 的输入大小应该遵循训练数据的输入大小吗?例如,如果我的训练数据大小为 192 x 98,那么我的 CNN 的输入大小应该是多少? 192×192? 98×98?如果我使用 32x32 输入 C
我正在学习如何使用 Keras 和 CIFAR-10 数据集实现数据增强。我正在在线教程和这本书的帮助下学习Deep learning with Keras. 代码具体详情为here . 这是我的问题
我在深度网络中使用 1x1 卷积来减少特征 x:Bx2CxHxW 到 BxCxHxW。我有三个选择: x -> Conv (1x1) -> Batchnorm-->ReLU。代码将为output =
我不确定这在 Tensorflow 中是否可行,我担心我可能不得不切换到 PyTorch。 基本上,我有这一层: self.policy_conv1 = tf.layers.conv2d(inputs
我正在使用 actions-sdk 和 nodejs 构建一个“游戏”。对于此游戏,一项功能要求音频在接受用户输入之前完成。是否可以使用 conv.ask() 忽略文本意图的输入,直到音频完成?另外,
(yolo - 物体检测) 如果图像中有两只狗,而我在训练集中存在的所有图像中只对其中一只进行了训练, 训练集中我没有标记和训练的其他狗是否会影响过程并导致将它们视为背景的一部分? 我特别询问 yol
我正在尝试 convert CNN Keras model对于使用 FER2013 数据集到 PyTorch 模型的情绪识别,我有以下错误: Traceback (most recent call l
函数名conv中的“localeconv()”是什么意思在标题 ? 最佳答案 The HP-UX manual pages ,将 localeconv() 的用途总结为: localeconv()
我是一名优秀的程序员,十分优秀!