8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

层“dense”的输入 0 与层不兼容:输入形状的预期轴 -1 的值为 36864,但收到的输入形状为 (190,1536)

bestsss 2月前

50 0

我正在尝试创建一个用于灰度图像的图像分类模型。并收到错误:ValueError:调用 Sequential.call() 时遇到异常。层 \'dense\' 的输入 0...

我正在尝试创建一个用于灰度图像的图像分类模型。但出现了错误:

ValueError: Exception encountered when calling Sequential.call().

Input 0 of layer "dense" is incompatible with the layer: expected axis -1 of input 
shape to have value 36864, but received input with shape (190, 1536)

我的模型:

model = Sequential([
    layers.Rescaling(1./255, input_shape=(190, 190, 1),
    layers.Conv2D(16, 3, padding='same', activation='relu'),
    layers.MaxPooling2D((2,2), padding='same'),
    layers.Conv2D(32, 3, padding='same', activation='relu'),
    layers.MaxPooling2D((2,2), padding='same'),
    layers.Conv2D(64, 3, padding='same', activation='relu'),
    layers.MaxPooling2D((2,2), padding='same'),
    layers.Flatten(),
    layers.Dense(128, activation='relu'),
    layers.Dense(num_classes)
    ])

    model.compile(optimizer='adam',
                loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])

我在 npy 文件中加载灰度图像的 numpy 数组,并将其转换为 train_ds 以在使用此代码进行训练时传递给模型:

     train_img = train_img[:, :, :, np.newaxis]
     train_labels = np.full(train_img.shape[0], i+1)
     train_ds = tf.data.Dataset.from_tensor_slices((train_img, train_labels))

当我执行train_img.shape时,输入的形状是(5055,190,190,1)

model.summary() 给我看 这个 .

如何解决这个问题?

帖子版权声明 1、本帖标题:层“dense”的输入 0 与层不兼容:输入形状的预期轴 -1 的值为 36864,但收到的输入形状为 (190,1536)
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由bestsss在本站《tensorflow》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 尽管下载了枕头模块,我仍然遇到导入错误,是的,尽管我遇到了错误,但我还是卸载了枕头。有什么想法可以解决它吗?https://i.sstatic.net/eAhcTExv.png我

    尽管下载了枕头模块,我仍然遇到导入错误,是的,尽管我遇到了错误,但我还是卸载了枕头。有什么解决办法吗? https://i.sstatic.net/eAhcTExv.png

    我希望包含所有图像的文件夹被导入,以便我可以通过导入的图像训练数据

  • Priyansu,我很乐意帮助你,但说实话我不想打开任何图片。你的链接看起来相当可疑,所以如果可以的话,请检查你的帖子并添加更多具体细节。

  • 请分享更多信息。导入错误与脚本的调用方式/位置和/或 Python 环境的设置方式密切相关

  • 我有一个类似于此的嵌套 JavaScript 对象 const obj = { topLevelProp1: 'some', topLevelProp2: 'data', topLevelPropArr: [{ uid: 'd7ed3623-e431-4bfa-85b3-8da14fa399c3', secLeve...

    我有一个类似于此的嵌套 JavaScript 对象

    const obj = {
      topLevelProp1: 'some',
      topLevelProp2: 'data',
      topLevelPropArr: [{
        uid: 'd7ed3623-e431-4bfa-85b3-8da14fa399c3',
        secLevelProp1: 123,
        secLevelPropArr: [{
          uid: '15562309-22b7-4b11-a12e-b3374f0a7636',
          thirdLevelProp1: 'a plain value',
          thirdLevelProp2: {
            a: 'I am',
            b: 'a nested',
            c: 'object',
          },
        }, {
          uid: '9394f313-b7bf-45fa-b8f3-683832ff7aa2',
          thirdLevelProp1: null,
          thirdLevelProp2: {
            a: 'I am also',
            b: 'another nested',
            c: 'object !!!',
          },
        }],
      }, {
        uid: '04a487c6-9624-4b2e-8411-59a69c14f1e3',
        secLevelProp1: 456,
        secLevelPropArr: [{
          uid: '58d4a3fd-734c-4c22-a0e3-f669e6ec7af3',
          thirdLevelProp1: 'another plain value',
        }],
      }],
    };
    

    对于任何给定的 嵌套 uid 属性值 都是 (它们是 uuid v4 字符串)

    我还有一个字符串数组,描述 某个嵌套属性的路径 ,如下所示:

    const paths = [
      'topLevelProp2',
      '04a487c6-9624-4b2e-8411-59a69c14f1e3.secLevelProp1',
      'd7ed3623-e431-4bfa-85b3-8da14fa399c3.9394f313-b7bf-45fa-b8f3-683832ff7aa2.thirdLevelProp2.a',
      'd7ed3623-e431-4bfa-85b3-8da14fa399c3.9394f313-b7bf-45fa-b8f3-683832ff7aa2.thirdLevelProp2.c',
    ];
    

    不使用数组属性的键,而是使用所包含对象的 uid 值

    因此该字符串 'd7ed3623-e431-4bfa-85b3-8da14fa399c3.9394f313-b7bf-45fa-b8f3-683832ff7aa2.thirdLevelProp2.a' 以更常见的 'topLevelPropArr.0.secLevelPropArr.1.thirdLevelProp2.a' 对象路径 表示法来表示路径

    我想以某种方式过滤我的对象,因此它将 仅包含路径数组中包含的(所有嵌套)属性 .

    使用上面的例子, 通过 路径 obj 将导致:

    {
      topLevelProp2: 'data',
      topLevelPropArr: [{
        secLevelProp1: 456,
        secLevelPropArr: [{
          thirdLevelProp2: {
            a: 'I am also',
            c: 'object !!!',
          },
        }],
      }, {
        secLevelProp1: 456,
      }],
    }
    

    没有必要保持数组中项目的顺序。

    这是我尝试过的代码(老实说,我认为递归不正确)

    const SEPARATOR = '.';
    
    
    const filterDataByPath = (originalData, path, filteredData = {}) => {
    
      const pathChunks = path.split(SEPARATOR);
      const currentChunk = pathChunks[0];
    
      // test whether there is a key in the current level of editData corresponding to the current chunk
      if (originalData.hasOwnProperty(currentChunk)) {
        // test whether the current value of the current valid key is an object
        if (typeof originalData[currentChunk] === 'object') {
          // recursively filter this object
          filteredData[currentChunk] = filterDataByPath(originalData[currentChunk], pathChunks.splice(1).join(SEPARATOR));
        } else {
          // take over the data value for the current key
          filteredData[currentChunk] = originalData[currentChunk];
        }
      } else { // find an array containing object with uid
        // and ist related key
        const [ key, val ] = Object.entries(originalData).reduce((keyArr, [ k, v ]) => {
          if (Array.isArray(v)) {
            // find the object with matching uid
            const targetrArray = v.find(obj => obj.uid === currentChunk);
            // if such object found returns it together with the key of the array storing it
            if (targetrArray) {
              return [ k, targetrArray ];
            }
          }
          return keyArr;
        }, []);
    
        // we found such an array
        if (key) {
          // create a new array in the filtered data under this particular key if not already present
          filteredData[key] = Array.isArray(filteredData[key]) ? filteredData[key] : [];
    
          filteredData[key].push(this.filterDataByPath(val, pathChunks.splice(1).join(SEPARATOR)));
    
          } else {
            // key not found - throw an exception, something is wrong with our path
            throw new Error(`Path not right, unknown chunk ${currentChunk}`);
          }
    
      }
      return filteredData;
    }
    
    
    let filteredData = {};
    for (let index = 0; index < paths.length; index++) {
      filteredData = filterDataByPath(originalData, paths[index], filteredData)
    };
    

    问题是,过滤数据中的数组有重复的条目

    背景:

    数据绑定到 Angular 模板驱动表单。由于 no support for FormArrayGroups in the Template-Driven Forms 可能的解决方法是声明一个 FormGroup ,并为一个分配一个唯一键 ngModelGroup

    <fieldset *ngFor="let secLevelItem of data.topLevelPropArr;"
      [ngModelGroup]="secLevelItem.uid">
    

    当然,您可以 use index provided by the *ngFor ,但当您按需添加/删除表单字段时,这不起作用。因此,解决方案是 uid .

    这些路径是表单控件名称的连接,提供到特定 dirty 值的路径——在表单中更改的值

  • 在 views.py 中,如果我定义像 clients_list = Clients.objects.all() 这样的变量并在 html 中读取它们,例如 {{ clients_list }},那么我就能获得所有正确的数据。但是如果我进行像 clients_list = 这样的过滤

    在 views.py 中,如果我定义类似的变量 clients_list = Clients.objects.all() 并在 html 中读取它们, {{ clients_list }} 那么我就能获得所有正确的数据。

    但是如果我进行类似的过滤 clients_list = Clients.objects.filter(cli_account='123').values() ,那么所有外键都会转换为整数,并且如果在 html 中请求则不会显示(仅在所有查询集中)。

    我需要过滤客户端列表但保留所有外键,因为它们未经过滤,而不是整数字符串。

    附言:如果我在第一个版本中尝试获取 {{ obj.cli_status }},我会得到 \'ready\',但在第二个版本中我得到的是空白(查询集中的整数)

  • 在 views.py 中传递客户端时我使用以下行:

    clients_list = Clients.objects.filter(cli_account='123').values()
    

    但为了能正常工作,结尾应该是这样的:

    clients_list = Clients.objects.filter(cli_account='123').select_related('cli_status')
    

    我不知道为什么,但是所有外键(cli_status 和其他)现在都显示为文本并且工作正常

  • MMEL 2月前 0 只看Ta
    引用 8

    此解决方案对数据和路径都采用递归方法。它先检查对象中的 ke,然后检查对象或简单值或数组中的 uid。如果找到,则采用子结构和路径的其余部分。

    const
        getData = (object, paths) => {
            const
                reference = {},
                order = new WeakMap,
                result = {},
                isOnlyObject = value => value && typeof value === 'object' && !Array.isArray(value),
                go = (source, target, [key, ...path]) => {
                    if (key in source) {
                        const value = source[key];
                        if (isOnlyObject(value)) go(value, target[key] ??= {}, path);
                        else target[key] = value;
                        return;
                    }
                    for (const k in source) {
                        const v = source[k];
                        if (!Array.isArray(v)) continue;
                        const index = v.findIndex(({ uid }) => uid === key);
                        if (index === -1) continue;
                        if (!reference[key]) {
                            (target[k] ??= []).push(reference[key] = {});
                            order.set(reference[key], index);
                            target[k].sort((a, b) => order.get(a) - order.get(b));
                        }
                        if (path.length) go(v[index], reference[key], path);
                    }
                };
    
            for (const path of paths) go(object, result, path.split('.'));
            
            return result;
        },
        data = { topLevelProp1: 'some', topLevelProp2: 'data', topLevelPropArr: [{ uid: 'd7ed3623-e431-4bfa-85b3-8da14fa399c3', secLevelProp1: 123, secLevelPropArr: [{ uid: '15562309-22b7-4b11-a12e-b3374f0a7636', thirdLevelProp1: 'a plain value', thirdLevelProp2: { a: 'I am', b: 'a nested', c: 'object' } }, { uid: '9394f313-b7bf-45fa-b8f3-683832ff7aa2', thirdLevelProp1: null, thirdLevelProp2: { a: 'I am also', b: 'another nested', c: 'object !!!' } }] }, { uid: '04a487c6-9624-4b2e-8411-59a69c14f1e3', secLevelProp1: 456, secLevelPropArr: [{ uid: '58d4a3fd-734c-4c22-a0e3-f669e6ec7af3', thirdLevelProp1: 'another plain value' }] }] }, 
        paths = ['topLevelProp2', '04a487c6-9624-4b2e-8411-59a69c14f1e3.secLevelProp1', 'd7ed3623-e431-4bfa-85b3-8da14fa399c3.9394f313-b7bf-45fa-b8f3-683832ff7aa2.thirdLevelProp2.a', 'd7ed3623-e431-4bfa-85b3-8da14fa399c3.9394f313-b7bf-45fa-b8f3-683832ff7aa2.thirdLevelProp2.c'];
    
    console.log(getData(data, paths));
    .as-console-wrapper { max-height: 100% !important; top: 0; }
  • 太棒了,非常感谢。您能解释一下 target[key] ??= {} 和 target[k] ??= [] 赋值的含义吗?它是当前值还是空对象/数组?

  • target[k] ??= [] 表示仅当 target[k] 为空或未定义时才分配一个数组。请参阅逻辑空值赋值 ??=

  • 谢谢,还有一个问题:如果路径的一部分因某种原因损坏/不适合数据,会发生什么?会返回部分结果吗?在我最初的尝试中,我试图通过抛出异常来针对这种情况

返回
作者最近主题: