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

TimeDistributed.call() 接收的参数:

Christian Vincenzo Traina 2月前

110 0

我正在尝试做一个视频分类 dl 项目。预处理:从每个视频中,我取出 20 帧并重新整形它们并将它们添加到一个列表中,我的 x.shape 看起来像这样 --> (无,20,2...

我正在尝试做一个视频分类 dl 项目。预处理:从每个视频中,我取出 20 帧并重新整形它们并将它们添加到列表中,我的 x.shape 看起来像这样 --> (None, 20, 224, 224, 3)模型:我使用 vgg16 作为基础模型并组合使用 lstm 层。baseModel = VGG16(weights=\'imagenet\', include_top=False, input_shape=(frame_height, frame_width, 3))

#model
model = Sequential()
model.add(TimeDistributed(baseModel, input_shape=(sequence, frame_height, frame_width, 3)))
model.add(TimeDistributed(Dropout(0.3)))
model.add(TimeDistributed(Flatten()))
model.add(TimeDistributed(Dropout(0.3)))
#LSTM Layer
model.add(LSTM(320, activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(label_count, activation="softmax")) 

for layer in baseModel.layers:
    layer.trainable = False

optimizers = Adam(learning_rate=0.001)
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizers, metrics=['accuracy'])

model.fit(x=x_train, y=y_train, validation_data=(x_val,y_val),epochs=1, batch_size=10, callbacks=[early_stopping])

此后,我将模型保存在本地:model.save(\'model.keras\')

但是,当我尝试使用 :loaded_model = load_model(r'model.keras') 加载模型时

我收到一个 ValueError:无法将“20”转换为形状。

TimeDistributed.call() 接收的参数:• args=(' ',)• kwargs={'mask': 'None'}

我想保存模型以供以后使用并在需要时加载它。我很新手,所以任何事情都会有帮助,即使有更好的预处理方法或更好的模型架构。

帖子版权声明 1、本帖标题:TimeDistributed.call() 接收的参数:
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Christian Vincenzo Traina在本站《tensorflow》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 如何可视化用于测试使用混淆矩阵创建的模型的样本?例如如下所示。您可以访问 GitHub,整个过程都很相似,只是架构不同……

    如何可视化用于测试使用混淆矩阵创建的模型的样本?例如如下所示。

    你可以访问 GitHub,整个过程是相似的,只是架构和数据集不同

    https://github.com/cendekialnazalia/CaisimPestDetection/blob/main/Percobaan%20E%20-%20CNN%20add%20Models%20Xception.ipynb

    这是我的代码

    训练模型

    epochs = 10
    
    mc = ModelCheckpoint('sequential', monitor='val_accuracy', mode='max', verbose=1, save_best_only=True)  
    early_stopping = EarlyStopping(monitor='val_loss', patience=2)
    history=model.fit(x=train_gen, epochs=epochs, validation_data=valid_gen)
    
    def print_info( test_gen, preds, print_code, save_dir, subject ):
        class_dict=test_gen.class_indices
        labels= test_gen.labels
        file_names= test_gen.filenames 
        error_list=[]
        true_class=[]
        pred_class=[]
        prob_list=[]
        new_dict={}
        error_indices=[]
        y_pred=[]
        for key,value in class_dict.items():
            new_dict[value]=key             # dictionary {integer of class number: string of class name}
        # store new_dict as a text fine in the save_dir
        classes=list(new_dict.values())     # list of string of class names
        dict_as_text=str(new_dict)
        dict_name= subject + '-' +str(len(classes)) +'.txt'  
        dict_path=os.path.join(save_dir,dict_name)    
        with open(dict_path, 'w') as x_file:
            x_file.write(dict_as_text)    
        errors=0      
        for i, p in enumerate(preds):
            pred_index=np.argmax(p)        
            true_index=labels[i]  # labels are integer values
            if pred_index != true_index: # a misclassification has occurred
                error_list.append(file_names[i])
                true_class.append(new_dict[true_index])
                pred_class.append(new_dict[pred_index])
                prob_list.append(p[pred_index])
                error_indices.append(true_index)            
                errors=errors + 1
            y_pred.append(pred_index)    
        if print_code !=0:
            if errors>0:
                if print_code>errors:
                    r=errors
                else:
                    r=print_code           
                msg='{0:^28s}{1:^28s}{2:^28s}{3:^16s}'.format('Filename', 'Predicted Class' , 'True Class', 'Probability')
                print_in_color(msg, (0,255,0),(55,65,80))
                for i in range(r):                
                    split1=os.path.split(error_list[i])                
                    split2=os.path.split(split1[0])                
                    fname=split2[1] + '/' + split1[1]
                    msg='{0:^28s}{1:^28s}{2:^28s}{3:4s}{4:^6.4f}'.format(fname, pred_class[i],true_class[i], ' ', prob_list[i])
                    print_in_color(msg, (255,255,255), (55,65,60))
                    #print(error_list[i]  , pred_class[i], true_class[i], prob_list[i])               
            else:
                msg='With accuracy of 100 % there are no errors to print'
                print_in_color(msg, (0,255,0),(55,65,80))
        if errors>0:
            plot_bar=[]
            plot_class=[]
            for  key, value in new_dict.items():        
                count=error_indices.count(key) 
                if count!=0:
                    plot_bar.append(count) # list containg how many times a class c had an error
                    plot_class.append(value)   # stores the class 
            fig=plt.figure()
            fig.set_figheight(len(plot_class)/3)
            fig.set_figwidth(10)
            plt.style.use('fivethirtyeight')
            for i in range(0, len(plot_class)):
                c=plot_class[i]
                x=plot_bar[i]
                plt.barh(c, x, )
                plt.title( ' Errors by Class on Test Set')
        y_true= np.array(labels)        
        y_pred=np.array(y_pred)
        if len(classes)<= 30:
            # create a confusion matrix 
            cm = confusion_matrix(y_true, y_pred )        
            length=len(classes)
            if length<8:
                fig_width=8
                fig_height=8
            else:
                fig_width= int(length * .5)
                fig_height= int(length * .5)
        
            plt.figure(figsize=(fig_width, fig_height))
            sns.heatmap(cm, annot=True, vmin=0, fmt='g', cmap='Blues', cbar=False)       
            plt.xticks(np.arange(length)+.5, classes, rotation= 90)
            plt.yticks(np.arange(length)+.5, classes, rotation=0)
            plt.xlabel("Predicted")
            plt.ylabel("Actual")
            plt.title("Confusion Matrix")
            plt.show()
        clr = classification_report(y_true, y_pred, target_names=classes)
        print("Classification Report:\n----------------------\n", clr)
    

    混淆矩阵

    print_code=0
    preds=model.predict(test_gen) 
    print_info( test_gen, preds, print_code, save_dir, subject ) 
    

    输出

    我不仅想显示表格输出和召回率、精确度和 f1 分数值,还想显示 CM 预测的每幅图像的可视化效果,例如像上面的图片,或者可能更好。

    例如,在 \'Daun Sehat\' 表中,有一个数据样本被预测为 \'Karat Merah\',但如果没有该信息的可视化,我不知道 \'Daun Sehat\' 的哪个图像样本被检测为 \'Karat Merah\'

    在最后一行代码“对测试集进行预测并生成混淆矩阵和分类报告”之后,我添加了如下代码来找出每个测试数据的预测

    test_gen.class_indices
    
    print(preds,preds.shape)
    
    result_index = np.argmax(preds[])
    print(result_index)
    
    for i in range(len(preds)):
      if(np.argmax(preds[i]) == 0):
          print("Bercak Daun")
      elif(np.argmax(preds[i]) == 1):
          print("Daun Sehat")
      elif(np.argmax(preds[i]) == 2):
          print("Karat Merah")
      else:
          print("Lainya")
    

    输出

    Bercak Daun
    Daun Sehat
    .
    .
    .
    up to 177
    Daun Sehat
    

    我不只是想显示带有字符串的预测,还想将其与图像一起显示。也许有更好、更高效的代码可以解决我的问题?

  • 如果你想查看整个代码,你可以访问 GitHub,整个过程是相似的,只是架构和数据集不同

  • 目前还不清楚如何绘制混淆矩阵,但您可以对其进行迭代, preds test_gen 在样本和输出的标签不同时绘制样本和输出。

    由于您没有显示用于模型的输入类型,因此使用的显示方法由您决定。

    代码看起来是这样的:

    # You should have before :
    #   x_test : test dataset 
    #   y_true : labels of x_test
    
    y_pred=model.predict(x_test)
    
    # First loop to sort falty predictions from correct ones
    wrong_labels = []
    for label, i in enumerate(y_pred) : # The array we iterate on doesn't matter, as they all are the same length
        if label != y_true[i] :
            wrong_labels.append([x_test, y_true, y_pred])
    
    # Second loop to display errors, the limit to 4 samples is arbitrary
    
    for x, y_true, y_pred, i in enumerate(wrong_labels) : 
        if i>=4 :
            break
        plt.subplot(1,4,i+1)
        display_sample(x)   # This function depends on the type of sample you have
        plt.title("Label " + str(y_true) + " expected, but predicted "+str(y_pred))
    
    plt.show()
    
  • 您的答案可以通过添加额外的支持信息来改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何撰写良好答案的更多信息。

  • 查看此截图我最近集成了“draganddropboard”库来实现与 Trello 的拖放功能类似的功能。但是,我遇到了一个问题,尝试...

    查看此截图

    我最近集成了“draganddropboard”库来实现类似于 Trello 的拖放功能。但是,我遇到了一个问题,尝试拖放卡片会导致错误,提示“无法将未定义的值转换为对象”。尽管之前功能运行正常,但这个问题突然出现了。我不确定是什么导致了这个错误发生。

    请大家帮帮忙。需要你们的支持。

  • github.com/cendekialnazalia/CaisimPestDetection/blob/main/…如果你想查看整个代码,你可以访问 GitHub,整个过程都很类似,只是架构和数据集不同

  • 谢谢我收到错误先生您能帮我解释为什么错误并解决这个问题吗Cell In[26], line 8 6 error_labels = [] 7 for label, i in enumerate(y_pred) : # 我们迭代的数组并不重要,因为它们的长度都相同 ----> 8 if label != y_true[i] : 9 error_labels.append([test_gen, y_true, y_pred]) 11 # 第二次循环显示错误,4 个样本的限制是任意的IndexError:用作索引的数组必须是整数(或布尔)类型

  • 我正在尝试使用 tensorflowjs_converter 将我在 python 中训练的模型(使用 tensorflow)转换为 JSON 层格式,以便可以在 Web 上运行它。我安装了最新版本,...

    我正在尝试使用 tensorflowjs_converter 将我在 python 中训练的模型(使用 tensorflow)转换为 JSON 层格式,以便可以在 Web 上运行它。我安装了最新版本,并转换了一个测试模型。对于这个模型,它按预期给了我一个 model.json .bin 文件,但是当我去 Web 上运行它时,我遇到了一个错误:

    Uncaught (in promise) Error: Provided weight data has no target variable: sequential/conv2d/kernel
        at a.value (container.js:643:15)
        at models.js:331:11
        at h (tf.min.js:17:2100)
        at Generator.<anonymous> (tf.min.js:17:3441)
        at Generator.next (tf.min.js:17:2463)
        at u (tf.min.js:17:8324)
        at o (tf.min.js:17:8527)
    

    检查后发现,该 model.json 文件的变量名中添加了后缀(例如: conv2d_1 而不是 conv2d ),我认为这是导致问题的原因。

    我用来生成.h5 文件的代码:

    model.save("mnist_model.h5") (如果需要可以提供所有代码包括培训)

    我在网络上运行模型时使用的代码:

    const modelPath = "new_model/model.json"
    
    const model = await tf.loadLayersModel(modelPath, strict=false)
    

    tensorflowjs的脚本标签:

    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"></script>

    版本信息:

    python         3.9.13  
    tensorflow     2.16.2  
    tensorflowjs   4.20.0  
    numpy          1.26.4  
    

    经过一些搜索(查找“错误:提供的权重数据没有目标变量:\”),我发现 这个 stack overflow 问题 这个 github 问题 带来了同样的问题。

    堆栈溢出问题没有用,因为我计划构建一个更复杂的模型,手动(甚至编写脚本)修复模型文件中的错误将非常繁琐。

    github 问题建议了多种解决方案,但对我来说都不起作用,例如加载模型一次(这是我已经在做的)、使用命令行工具而不是 python 代码(这两种方式都不起作用)、在函数调用中添加 false(他们正在使用 tf.loadModel,它已被弃用,而我正在使用 tf.loadLayersModel,因为那篇帖子已经有 6 年了)、运行 keras.backend.clear_session() 或 tf.keras.backend.clear_session()(不起作用)、在 colab 中重新启动会话并运行每个单元一次(不起作用)。

  • 每当我使用相同的脚本创建 2 个对象时,当我更新一个对象时,它们都会更新我一直在研究一个模型太阳系,它有几个行星游戏对象,其中包括单纯形……

    每当我用相同的脚本创建两个对象时,当我更新一个对象时,它们都会更新

    我一直在研究一个模型太阳系,它有几个行星游戏对象,包括单纯形噪声以生成随机地形。我还有多个连接它们的值,我可以更改这些值来改变所述地形。问题是,当我创建第二个附加了相同脚本的游戏对象时,当我去更改其中一个对象的值时,它们都会得到相同的更新。我希望发生的是每个“行星”对象都单独更新,从而使每个对象都具有彼此独特的地形。

    提前致谢!

  • 多个对象上的脚本默认是一个新实例,因此其中任何非类变量的变量对于每个项目都是唯一的,因此健康状况是针对每个敌人的,而不是针对所有人的。

  • 您能否包含代码的相关部分?具体来说,包括创建第二颗行星的方法、地形值的声明以及更改这些值的方式。我猜您要么将某些东西标记为静态,而这些东西不应该是静态的,要么您实际上没有创建行星类的深层副本/单独实例。

返回
作者最近主题: