模型训练后,进行识别时,权重不一致,怎么修改? 5C

通过ModelTraining 训练的生成模型

 from imageai.Prediction.Custom import ModelTraining
model_trainer = ModelTraining()
model_trainer.setModelTypeAsResNet()
model_trainer.setDataDirectory("datasets")

# batch_size  训练类别的整除数
model_trainer.trainModel(num_objects=4, num_experiments=10, enhance_data=True, batch_size=2, show_network_summary=True)

当与imageai的模型世界时报错

 # from imageai.Detection import ObjectDetection
# import os
# import time
# #计时
# start = time.time()
# execution_path = os.getcwd()
#
# detector = ObjectDetection()
# detector.setModelTypeAsRetinaNet()
#
# #载入已训练好的文件
# detector.setModelPath( os.path.join(execution_path , "model_weights.h5"))
# detector.loadModel('fastest')
#
# #将检测后的结果保存为新图片
# detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "./img/one.jpg"), output_image_path=os.path.join(execution_path , "./img/image3new.jpg"))
#
# #结束计时
# end = time.time()
#
# for eachObject in detections:
#     print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
#     print("--------------------------------")
#
# print ("\ncost time:",end-start)


#!/usr/bin/env python3
from imageai.Detection import ObjectDetection
import os

execution_path = os.getcwd()

detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath(os.path.join(execution_path , "./models/model_ex-010_acc-0.250000.h5"))
detector.loadModel()

detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "img/one.jpg"), output_image_path=os.path.join(execution_path , "image3new.jpg"), minimum_percentage_probability=30)

for eachObject in detections:
    print(eachObject["name"] , " : ", eachObject["percentage_probability"])
    print("--------------------------------")

运行时报错:
ValueError: You are trying to load a weight file containing 107 layers into a model with 116 layers.

应该怎么修改让他们可以进行识别

3个回答

你是不是保存了模型以后又修改了模型,两个不一致,只能重新训练了。

我也遇到了相同的问题,我们训练的只是图像预测的模型不能用于对象检测

不知道这个问题解决没有,来回答一下吧,下式三选一,与自己选的模型(官方)对应就行了
detector.setModelTypeAsTinyYOLOv3()
detector.setModelTypeAsYOLOv3()#
detector.setModelTypeAsRetinaNet()#

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为何用tensorflow对权重进行训练后将权重的值打印出来发现每次训练后权重的值没有发生变化?

为何用tensorflow对权重进行训练后将权重的值打印出来发现每次训练后权重的值没有发生变化?

求助:(Pytorch)resnet加载预训练好的模型finetune时conv、bn层权重均不更新,为什么呢?

在resnet先进行了预训练后,根据预训练权重进行剪枝,再加载剪枝后模型及权重后,对模型进行finetune时,发现conv、bn层的权重均没有更新。尝试改变学习率后对结果没有影响。 p.requires_grad: True net.stage_1[0].bn_a.track_running_stats: True net.stage_1[0].bn_a.training: False 上面的情况,finetune与train时都一致,没有变化。 finetune代码与train代码其实没有什么区别,只不过一个前者加载了个模型而已,为什么后者可以正常更新权重,前者却不可以?还可能是什么原因呢?

tensorflow如何在每一次训练后都重置部分权重的值?

看了CSDN的一些博客但是但是感觉不得要领,好像都是在说重载某一层的权重,那如果要重置同一层中的部分权重,其他则保持一样又该如何呢?跪求大佬教教我!

请大神指点,VGG-16训练时权重不更新,怎么回事??

用tensorflow训练VGG-16时,权重不发生变化是怎么回事?? ``` import tensorflow as tf import scipy.io as sio #import numpy as np import matplotlib.image as mpimg import pickle as cp a = list(sio.loadmat('dataset/corel5k_train_annot.mat')['annot1']) b = list(sio.loadmat('dataset/corel5k_test_annot.mat')['annot2']) def get_batch(image, label, batch_size, now_batch, total_batch): if now_batch < total_batch-1: image_batch = image[now_batch*batch_size:(now_batch+1)*batch_size] label_batch = label[now_batch*batch_size:(now_batch+1)*batch_size] else: image_batch = image[now_batch*batch_size:] label_batch = label[now_batch*batch_size:] #image_batch = tf.reshape(image_batch,[-1,128,128,3]) return image_batch,label_batch train_img = [] with open('image/corel5k_train_list.txt') as f: for i in f.readlines(): train_img += [mpimg.imread('image/%s.jpg'%i.strip())] cp.dump(train_img,open("train.pkl","wb")) test_img = [] with open('image/corel5k_test_list.txt') as f: for i in f.readlines(): test_img += [mpimg.imread('image/%s.jpg'%i.strip())] cp.dump(test_img,open("test.pkl","wb"))#一种保存列表的方式 x = tf.placeholder(tf.float32,[None,128,128,3]) y_ = tf.placeholder(tf.float32, shape=[None, 260]) #loss=tf.Variable(tf.constant(0.0)) #第一 W1 = tf.Variable(tf.truncated_normal([3, 3, 3, 64], mean=0.0,stddev=1.0)) b1 = tf.Variable(tf.constant(0.0, shape=[64])) h1 = tf.nn.relu(tf.nn.conv2d(x, W1, strides=[1, 1, 1, 1], padding='SAME') + b1) #p1 = tf.nn.max_pool(h1, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') W2 = tf.Variable(tf.truncated_normal([3, 3, 64, 64], mean=0.0,stddev=1.0)) b2 = tf.Variable(tf.constant(0.0, shape=[64])) h2 = tf.nn.relu(tf.nn.conv2d(h1, W2, strides=[1, 1, 1, 1], padding='SAME') + b2) p2 = tf.nn.max_pool(h2, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') #第二 W3 = tf.Variable(tf.truncated_normal([3, 3, 64, 128], mean=0.0,stddev=1.0)) b3 = tf.Variable(tf.constant(0.0, shape=[128])) h3 = tf.nn.relu(tf.nn.conv2d(p2, W3, strides=[1, 1, 1, 1], padding='SAME') + b3) #p3 = tf.nn.max_pool(h2, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') W4 = tf.Variable(tf.truncated_normal([3, 3, 128, 128], mean=0.0,stddev=1.0)) b4 = tf.Variable(tf.constant(0.0, shape=[128])) h4 = tf.nn.relu(tf.nn.conv2d(h3, W4, strides=[1, 1, 1, 1], padding='SAME') + b4) p4 = tf.nn.max_pool(h4, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') #第三 W5 = tf.Variable(tf.truncated_normal([3, 3, 128, 256], mean=0.0,stddev=1.0)) b5 = tf.Variable(tf.constant(0.0, shape=[256])) h5 = tf.nn.relu(tf.nn.conv2d(p4, W5, strides=[1, 1, 1, 1], padding='SAME') + b5) W6 = tf.Variable(tf.truncated_normal([3, 3, 256, 256], mean=0.0,stddev=1.0)) b6 = tf.Variable(tf.constant(0.0, shape=[256])) h6 = tf.nn.relu(tf.nn.conv2d(h5, W6, strides=[1, 1, 1, 1], padding='SAME') + b6) W7 = tf.Variable(tf.truncated_normal([3, 3, 256, 256], mean=0.0,stddev=1.0)) b7 = tf.Variable(tf.constant(0.0, shape=[256])) h7 = tf.nn.relu(tf.nn.conv2d(h6, W7, strides=[1, 1, 1, 1], padding='SAME') + b7) p7 = tf.nn.max_pool(h7, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') #第四 W8 = tf.Variable(tf.truncated_normal([3, 3, 256, 512], mean=0.0,stddev=1.0)) b8 = tf.Variable(tf.constant(0.0, shape=[512])) h8 = tf.nn.relu(tf.nn.conv2d(p7, W8, strides=[1, 1, 1, 1], padding='SAME') + b8) W9 = tf.Variable(tf.truncated_normal([3, 3, 512, 512], mean=0.0,stddev=1.0)) b9 = tf.Variable(tf.constant(0.0, shape=[512])) h9 = tf.nn.relu(tf.nn.conv2d(h8, W9, strides=[1, 1, 1, 1], padding='SAME') + b9) W10 = tf.Variable(tf.truncated_normal([3, 3, 512, 512], mean=0.0,stddev=1.0)) b10 = tf.Variable(tf.constant(0.0, shape=[512])) h10 = tf.nn.relu(tf.nn.conv2d(h9, W10, strides=[1, 1, 1, 1], padding='SAME') + b10) p10 = tf.nn.max_pool(h10, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') #第五 W11 = tf.Variable(tf.truncated_normal([3, 3, 512, 512], mean=0.0,stddev=1.0)) b11 = tf.Variable(tf.constant(0.0, shape=[512])) h11 = tf.nn.relu(tf.nn.conv2d(p10, W11, strides=[1, 1, 1, 1], padding='SAME') + b11) W12 = tf.Variable(tf.truncated_normal([3, 3, 512, 512], mean=0.0,stddev=1.0)) b12 = tf.Variable(tf.constant(0.0, shape=[512])) h12 = tf.nn.relu(tf.nn.conv2d(h11, W12, strides=[1, 1, 1, 1], padding='SAME') + b12) W13 = tf.Variable(tf.truncated_normal([3, 3, 512, 512], mean=0.0,stddev=1.0)) b13 = tf.Variable(tf.constant(0.0, shape=[512])) h13 = tf.nn.relu(tf.nn.conv2d(h12, W13, strides=[1, 1, 1, 1], padding='SAME') + b13) p13 = tf.nn.max_pool(h13, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') W_fc1 = tf.Variable(tf.truncated_normal([4*4*512, 4096], mean=0.0,stddev=1.0)) b_fc1 = tf.Variable(tf.constant(0.0, shape=[4096])) h_pool2_flat = tf.reshape(p13, [-1, 4*4*512]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) keep_prob1 = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob1) W_fc2 = tf.Variable(tf.truncated_normal([4096, 4096], mean=0.0,stddev=1.0)) b_fc2 = tf.Variable(tf.constant(0.0, shape=[4096])) h_fc2 = tf.nn.relu(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) keep_prob2 = tf.placeholder(tf.float32) h_fc2_drop = tf.nn.dropout(h_fc2, keep_prob2) W_fc3 = tf.Variable(tf.truncated_normal([4096, 260], mean=0.0,stddev=1.0)) b_fc3 = tf.Variable(tf.constant(0.0, shape=[260])) y_conv=tf.nn.softmax(tf.matmul(h_fc2_drop, W_fc3) + b_fc3) loss = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y_conv + 1e-10), reduction_indices=[1])) train_step = tf.train.AdamOptimizer(0.1).minimize(loss) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for v in range(100): for r in range(90): image_batch,label_batch = get_batch(train_img,a,50,r,90) sess.run(train_step,feed_dict={x:image_batch,y_:label_batch,keep_prob1: 0.5,keep_prob2: 0.5}) print(sess.run(W_fc3)) print("*") test_batch,testlabel_batch = get_batch(test_img,b,50,0,2) print(sess.run(loss,feed_dict={x:test_batch,y_:testlabel_batch,keep_prob1: 1,keep_prob2: 1})) ```

mask rcnn更换特征提取网络后还能用之前的模型继续训练么?

请问我现在把mask rcnn中的resnet换成了densenet网络,我还能用官方的coco权重以及我之前用resnet训练好的h5权重模型吗?

神经网络 能否让训练时权重之和始终保持1,从而得到最佳比例?

神经网络 能否让训练时权重之和始终保持1,从而得到最佳比例?

LogisticRegressionModel训练出逻辑回归模型后,怎么用这个模型去做预测?

LR模型已经训练出来并保存了,再次加载这个LR模型后怎么通过这个模型去做预测?模型类名:org.apache.spark.ml.classification.LogisticRegressionModel

pytorch自定义初始化权重后模型loss一直在2点几

``` class Net(nn.Module): def __init__(self): super(Net,self).__init__() self.conv1 = nn.Conv2d(3,64,3,padding=1,bias=False) self.conv2 = nn.Conv2d(64,64,3,padding=1,bias=False) self.pool1 = nn.MaxPool2d(2, 2) self.bn1 = nn.BatchNorm2d(64) self.relu1 = nn.ReLU() self.conv3 = nn.Conv2d(64,128,3,padding=1,bias=False) self.conv4 = nn.Conv2d(128, 128, 3,padding=1,bias=False) self.pool2 = nn.MaxPool2d(2, 2, padding=1) self.bn2 = nn.BatchNorm2d(128) self.relu2 = nn.ReLU() self.conv5 = nn.Conv2d(128,128, 3,padding=1,bias=False) self.conv6 = nn.Conv2d(128, 128, 3,padding=1,bias=False) self.conv7 = nn.Conv2d(128, 128, 1,padding=1,bias=False) self.pool3 = nn.MaxPool2d(2, 2, padding=1) self.bn3 = nn.BatchNorm2d(128) self.relu3 = nn.ReLU() self.conv8 = nn.Conv2d(128, 256, 3,padding=1,bias=False) self.conv9 = nn.Conv2d(256, 256, 3, padding=1,bias=False) self.conv10 = nn.Conv2d(256, 256, 1, padding=1,bias=False) self.pool4 = nn.MaxPool2d(2, 2, padding=1) self.bn4 = nn.BatchNorm2d(256) self.relu4 = nn.ReLU() self.conv11 = nn.Conv2d(256, 512, 3, padding=1,bias=False) self.conv12 = nn.Conv2d(512, 512, 3, padding=1,bias=False) self.conv13 = nn.Conv2d(512, 512, 1, padding=1,bias=False) self.pool5 = nn.MaxPool2d(2, 2, padding=1) self.bn5 = nn.BatchNorm2d(512) self.relu5 = nn.ReLU() self.fc14 = nn.Linear(512*4*4,1024) self.drop1 = nn.Dropout2d() self.fc15 = nn.Linear(1024,1024) self.drop2 = nn.Dropout2d() self.fc16 = nn.Linear(1024,10) def forward(self,x): x = self.conv1(x) x = self.conv2(x) x = self.pool1(x) x = self.bn1(x) x = self.relu1(x) x = self.conv3(x) x = self.conv4(x) x = self.pool2(x) x = self.bn2(x) x = self.relu2(x) x = self.conv5(x) x = self.conv6(x) x = self.conv7(x) x = self.pool3(x) x = self.bn3(x) x = self.relu3(x) x = self.conv8(x) x = self.conv9(x) x = self.conv10(x) x = self.pool4(x) x = self.bn4(x) x = self.relu4(x) x = self.conv11(x) x = self.conv12(x) x = self.conv13(x) x = self.pool5(x) x = self.bn5(x) x = self.relu5(x) # print(" x shape ",x.size()) x = x.view(-1,512*4*4) x = F.relu(self.fc14(x)) x = self.drop1(x) x = F.relu(self.fc15(x)) x = self.drop2(x) x = self.fc16(x) return x model = Net() #model = torch.nn.DataParallel(model) if t.cuda.is_available(): model.cuda() print(model) # torchvision输出的是PILImage,值的范围是[0, 1]. # 我们将其转化为tensor数据,并归一化为[-1, 1]。 transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ]) # 训练集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(50000张图片作为训练数据)加载到内存中,若download为True时,会自动从网上下载数据并解压 trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=False, transform=transform) # 将训练集的50000张图片划分成12500份,每份4张图,用于mini-batch输入。shffule=True在表示不同批次的数据遍历时,打乱顺序。num_workers=2表示使用两个子进程来加载数据 trainloader = torch.utils.data.DataLoader(trainset, batch_size=100, shuffle=False, num_workers=1) #测试集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(10000张图片作为测试数据)加载到内存中,若download为True时,会自动从网上下载数据并解压 testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=False, transform=transform) # 将测试集的10000张图片划分成2500份,每份4张图,用于mini-batch输入。 testloader = torch.utils.data.DataLoader(testset, batch_size=50, shuffle=False, num_workers=1) criterion = nn.CrossEntropyLoss()#叉熵损失函数 optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)#使用SGD(随机梯度下降)优化,学习率为0.001,动量为0.9 for epoch in range(1): # 遍历数据集10次 running_loss = 0.0 # enumerate(sequence, [start=0]),i序号,data是数据 for i, data in enumerate(trainloader, 0): #for i in range(1000): # get the inputs #data is list inputs, labels = data # data的结构是:[4x3x32x32的张量,长度4的张量] # wrap them in Variable inputs = Variable(inputs) labels=Variable(labels)# 把input数据从tensor转为variable if t.cuda.is_available(): inputs=inputs.cuda() labels=labels.cuda() #inputs,labels= inputs.type(torch.FloatTensor),labels.type(torch.FloatTensor) # zero the parameter gradients optimizer.zero_grad() # 将参数的grad值初始化为0 # forward + backward + optimize outputs = model(inputs) loss = criterion(outputs, labels) # 将output和labels使用叉熵计算损失 loss.backward() # 反向传播 optimizer.step() # 用SGD更新参数 # 每2000批数据打印一次平均loss值 running_loss += loss.item() # loss本身为Variable类型,所以要使用data获取其Tensor,因为其为标量,所以取0 或使用loss.item() if i % 500 == 499: # 每2000批打印一次 print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 500)) running_loss = 0.0 print('Finished Training') start = time.clock()#.time correct = 0 total = 0 for data in testloader: images, labels = data images=images.cuda() labels=labels.cuda() outputs = model(Variable(images)) print(outputs.shape) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum() print('Accuracy of the network on the 10000 test images: %d %%' % ( 100 * correct / total)) end = time.clock()#.time print("Running time: %s Seconds" % (end-start)) weight0=np.random.random((64,3,3,3)) weight0=nn.Parameter(torch.FloatTensor(weight0).cuda(),requires_grad=True) #weight1=np.random.random((64,64,3,3),dtype=np.float32) weight1=np.random.random((64,64,3,3)) weight1=nn.Parameter(torch.FloatTensor(weight1).cuda(),requires_grad=True) weight2=np.random.random((128,64,3,3)) weight2=nn.Parameter(torch.FloatTensor(weight2).cuda(),requires_grad=True) weight3=np.random.random((128,128,3,3)) weight3=nn.Parameter(torch.FloatTensor(weight3).cuda(),requires_grad=True) weight4=np.random.random((128,128,3,3)) weight4=nn.Parameter(torch.FloatTensor(weight4).cuda(),requires_grad=True) weight5=np.random.random((128,128,3,3)) weight5=nn.Parameter(torch.FloatTensor(weight5).cuda(),requires_grad=True) weight6=np.random.random((128,128,1,1)) weight6=nn.Parameter(torch.FloatTensor(weight6).cuda(),requires_grad=True) weight7=np.random.random((256,128,3,3)) weight7=nn.Parameter(torch.FloatTensor(weight7).cuda(),requires_grad=True) weight8=np.random.random((256,256,3,3)) weight8=nn.Parameter(torch.FloatTensor(weight8).cuda(),requires_grad=True) weight9=np.random.random((256,256,1,1)) weight9=nn.Parameter(torch.FloatTensor(weight9).cuda(),requires_grad=True) weight10=np.random.random((512,256,3,3)) weight10=nn.Parameter(torch.FloatTensor(weight10).cuda(),requires_grad=True) weight11=np.random.random((512,512,3,3)) weight11=nn.Parameter(torch.FloatTensor(weight11).cuda(),requires_grad=True) weight12=np.random.random((512,512,1,1)) weight12=nn.Parameter(torch.FloatTensor(weight12).cuda(),requires_grad=True) new_layer_id=0 for m1 in model.modules(): if isinstance(m1, nn.Conv2d): if (new_layer_id==0): m1.weight = weight0 elif(new_layer_id==1): m1.weight= weight1 elif(new_layer_id==2): m1.weight = weight2 elif(new_layer_id==3): m1.weight = weight3 elif(new_layer_id==4): m1.weight = weight4 elif(new_layer_id==5): m1.weight = weight5 elif(new_layer_id==6): m1.weight = weight6 elif(new_layer_id==7): m1.weight = weight7 elif(new_layer_id==8): m1.weight = weight8 elif(new_layer_id==9): m1.weight = weight9 elif(new_layer_id==10): m1.weight = weight10 elif(new_layer_id==11): m1.weight = weight11 elif(new_layer_id==12): m1.weight = weight12 new_layer_id=new_layer_id+1 elif isinstance(m1, nn.BatchNorm2d): m1.weight = m1.weight m1.bias = m1.bias elif isinstance(m1, nn.Linear): m1.weight = m1.weight m1.bias = m1.bias #torchvision输出的是PILImage,值的范围是[0, 1]. # 我们将其转化为tensor数据,并归一化为[-1, 1]。 transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ]) # 训练集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(50000张图片作为训练数据)加载到内存中,若download为True时,会自动从网上下载数据并解压 trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=False, transform=transform) # 将训练集的50000张图片划分成12500份,每份4张图,用于mini-batch输入。shffule=True在表示不同批次的数据遍历时,打乱顺序。num_workers=2表示使用两个子进程来加载数据 trainloader = torch.utils.data.DataLoader(trainset, batch_size=100, shuffle=False, num_workers=1) #测试集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(10000张图片作为测试数据)加载到内存中,若download为True时,会自动从网上下载数据并解压 testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=False, transform=transform) # 将测试集的10000张图片划分成2500份,每份4张图,用于mini-batch输入。 testloader = torch.utils.data.DataLoader(testset, batch_size=50, shuffle=False, num_workers=1) criterion1 = nn.CrossEntropyLoss()#叉熵损失函数 optimizer1 = optim.Adam(model.parameters(), lr=0.001)#使用SGD(随机梯度下降)优化,学习率为0.001,动量为0.9 #momentum=0.9 start = time.clock()#.time correct = 0 total = 0 for data in testloader: images, labels = data images=images.cuda() labels=labels.cuda() outputs = model(Variable(images)) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum() print('Accuracy of the Newmodel1 on the 10000 test images: %d %%' % ( 100 * correct / total)) end = time.clock()#.time print("Running time: %s Seconds" % (end-start)) for epoch in range(20): running_loss = 0.0 for i, data in enumerate(trainloader, 0): #for i in range(1000): inputs, labels = data inputs = Variable(inputs) #print(inputs.shape) labels=Variable(labels) inputs=inputs.cuda() labels=labels.cuda() optimizer1.zero_grad() outputs = model(inputs) loss = criterion1(outputs, labels) loss.backward() optimizer1.step() running_loss += loss.item() if i % 500 == 499: print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 500)) ```

tensorflow 中怎么查看训练好的模型的参数呢?

采用tensorflow中已有封装好的模块进行训练后(比如tf.contrib.layers.fully_connected),怎么查看训练好的模型的参数呢(比如某一层的权重/偏置都是什么)?求指教

tensorflow训练过程权重不更新,loss不下降,输出保持不变,只有bias在非常缓慢地变化?

模型里没有参数被初始化为0 ,学习率从10的-5次方试到了0.1,输入数据都已经被归一化为了0-1之间,模型是改过的vgg16,有四个输出,使用了vgg16的预训练模型来初始化参数,输出中间结果也没有nan或者inf值。是不是不能自定义损失函数呢?但输出中间梯度发现并不是0,非常奇怪。 **train.py的部分代码** ``` def train(): x = tf.placeholder(tf.float32, [None, 182, 182, 2], name = 'image_input') y_ = tf.placeholder(tf.float32, [None, 8], name='label_input') global_step = tf.Variable(0, trainable=False) learning_rate = tf.train.exponential_decay(learning_rate=0.0001,decay_rate=0.9, global_step=TRAINING_STEPS, decay_steps=50,staircase=True) # 读取图片数据,pos是标签为1的图,neg是标签为0的图 pos, neg = get_data.get_image(img_path) #输入标签固定,输入数据每个batch前4张放pos,后4张放neg label_batch = np.reshape(np.array([1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]),[1, 8]) vgg = vgg16.Vgg16() vgg.build(x) #loss函数的定义在后面 loss = vgg.side_loss( y_,vgg.output1, vgg.output2, vgg.output3, vgg.output4) train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss, global_step=global_step) init_op = tf.global_variables_initializer() saver = tf.train.Saver() with tf.device('/gpu:0'): with tf.Session() as sess: sess.run(init_op) for i in range(TRAINING_STEPS): #在train.py的其他部分定义了batch_size= 4 start = i * batch_size end = start + batch_size #制作输入数据,前4个是标签为1的图,后4个是标签为0的图 image_list = [] image_list.append(pos[start:end]) image_list.append(neg[start:end]) image_batch = np.reshape(np.array(image_list),[-1,182,182,2]) _,loss_val,step = sess.run([train_step,loss,global_step], feed_dict={x: image_batch,y_:label_batch}) if i % 50 == 0: print("the step is %d,loss is %f" % (step, loss_val)) if loss_val < min_loss: min_loss = loss_val saver.save(sess, 'ckpt/vgg.ckpt', global_step=2000) ``` **Loss 函数的定义** ``` **loss函数的定义(写在了Vgg16类里)** ``` class Vgg16: #a,b,c,d都是vgg模型里的输出,是多输出模型 def side_loss(self,yi,a,b,c,d): self.loss1 = self.f_indicator(yi, a) self.loss2 = self.f_indicator(yi, b) self.loss3 = self.f_indicator(yi, c) self.loss_fuse = self.f_indicator(yi, d) self.loss_side = self.loss1 + self.loss2 + self.loss3 + self.loss_fuse res_loss = tf.reduce_sum(self.loss_side) return res_loss #损失函数的定义,标签为0时为log(1-yj),标签为1时为log(yj) def f_indicator(self,yi,yj): b = tf.where(yj>=1,yj*50,tf.abs(tf.log(tf.abs(1 - yj)))) res=tf.where(tf.equal(yi , 0.0), b,tf.abs(tf.log(tf.clip_by_value(yj, 1e-8, float("inf"))))) return res ```

关于keras 对模型进行训练 train_on_batch参数和模型输出的关系

在用keras+gym测试policy gradient进行小车杆平衡时模型搭建如下: ``` inputs = Input(shape=(4,),name='ob_inputs') x = Dense(16,activation='relu')(inputs) x = Dense(16,activation='relu')(x) x = Dense(1,activation='sigmoid')(x) model = Model(inputs=inputs,outputs = x) ``` 这里输出层是一个神经元,输出一个[0,1]之间的数,表示小车动作的概率 但是在代码训练过程中,模型的训练代码为: ``` X = np.array(states) y = np.array(list(zip(actions,discount_rewards))) loss = self.model.train_on_batch(X,y) ``` 这里的target data(y)是一个2维的列表数组,第一列是对应执行的动作,第二列是折扣奖励,那么在训练的时候,神经网络的输出数据和target data的维度不一致,是如何计算loss的呢?会自动去拟合y的第一列数据吗?

请问训练完cnn网络,像这种权重图和特征图是怎么弄出来了,怎么会有这么高的分辨率

![权重](https://img-ask.csdn.net/upload/201701/07/1483800716_729501.jpg) ![特征](https://img-ask.csdn.net/upload/201701/07/1483800757_255671.jpg) 现在我对cnn的理解权重应该是那种很小(如:5X5)的卷积核,怎么会有这么清晰的权重图。特征图的效果也特别好,像原图一样,卷积后的特征应该也不是很清晰呀,哪位大神帮我解释一下,有可能我理解上有问题

如何建立自己的NLP训练模型

基于PYTHON开发一个NLP自然语言处理模型。最终结果希望能输入标题自动匹配相应的文本内容。 已经实现了语言素材的采集,采用GENSIM进行摘要和文本内容的匹配。现在的匹配算法有问题,匹配程度太低,给出的标题不能匹配到合适的文本,需要改进。 目前想法是自己建立人工智能训练模型,可以设置每个标题中不同关键词的优先级和先后顺序以及权重,然后不断人工进行标记和素材录入进行模型训练,来提升模型的精确性。需要帮助请大神支招! 具体流程是如何,采用什么模型?具体步骤是什么样的? ``` def CompareArticle1(ArticleSection,Articlesummary): # 文本集和搜索词 #texts = ['要深化大数据、人工智能等研发应用。当下,云计算、物联网、人工智能等技术飞速发展,并且在政务的“智能化”上发挥着日益重要的作用,要建设服务型政府,政务的“智能化”是必然方向。“互联网+政务服务”解决了信息采集、传输、监控等问题,能够促进各部门间数据共享,让群众和企业少跑腿、好办事、不添堵', #print(type(texts)) texts=ArticleSection # 1、将【文本集】生成【分词列表】 texts = [lcut(text) for text in texts] # 2、基于文本集建立【词典】,并获得词典特征数 dictionary = Dictionary(texts) num_features = len(dictionary.token2id) # 3.1、基于词典,将【分词列表集】转换成【稀疏向量集】,称作【语料库】 corpus = [dictionary.doc2bow(text) for text in texts] # 3.2、同理,用【词典】把【搜索词】也转换为【稀疏向量】 kw_vector = dictionary.doc2bow(lcut(keyword)) # 4、创建【TF-IDF模型】,传入【语料库】来训练 tfidf = TfidfModel(corpus) # 5、用训练好的【TF-IDF模型】处理【被检索文本】和【搜索词】 tf_texts = tfidf[corpus] # 此处将【语料库】用作【被检索文本】 tf_kw = tfidf[kw_vector] # 6、相似度计算 sparse_matrix = SparseMatrixSimilarity(tf_texts, num_features) similarities = sparse_matrix.get_similarities(tf_kw) #similarities = sparse_matrix.get_similarities(tf_texts) #print("类型") #print(similarities) #升序排列用于输出,不能重新排序会打乱原来的文本的位置。 #similarities2= sorted(similarities,reverse=True) #print(similarities2) #print(similarities) #print(sparse_matrix) #for e, s in enumerate(similarities, 2): # print('kw 与 text%s说 相似度为:%.2f' % (e, s)) return similarities ``` ``` def find_sub_max(arr, n): NumIndex=0 arr_=[] for i in range(n-1): arr_ = arr arr_[np.argmax(arr_)] = np.min(arr) arr = arr_ NumIndex=np.argmax(arr_) print("# arr中第{}大的数为{},位于第{}位".format(n,np.max(arr_), NumIndex)) return NumIndex ```

python如何自定义权重损失函数?

我利用keras的神经网络训练一个模型,被训练的数据是一个很大的二维数组,每一行是一个类别,总共有3种类别。被训练出的模型中包括3种类别(暂且称为A,B,C)。现在B类的预测准确率太高了,而A和C类的预测准确率较低,我想在把B类准确率适当减低的情况下来提高A和C类的预测准确率。请问该怎么操作? 代码如下,我从网上查了一些代码,自己不是特别明白,尝试后,出现了错误。请问该如何修改?下面添加的图片中被划红线圈住的代码是添加上去的,最终运行出错了,请问怎么修改,或者重新帮我写一个权重损失代码代码,跪谢 def custom_loss_4(y_true, y_pred, weights): return K.mean(K.abs(y_true - y_pred) * weights) model = models.Sequential() model.add(layers.Dense(200, activation = "relu", input_shape = (1175, ))) weights = np.random.randn(*X_train.shape) weights_tensor = Input(shape=(3,)) cl4 = partial(custom_loss_4,weights=weights_tensor) model.add(layers.Dropout(0.7)) model.add(layers.Dense(100, activation = "relu")) model.add(layers.Dropout(0.5)) model.add(layers.Dense(3, activation = "softmax")) model.compile(optimizer = "rmsprop", loss = cl4, metrics = ["accuracy"]) model.summary() ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570937131_951272.jpg) ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570936461_762097.png) ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570936605_599703.png) 补充一下:我在前面对数据做过了不平衡调整,定义的函数如下: def calc_class_weight(total_y): my_class_weight = class_weight.compute_class_weight("balanced", np.unique(total_y), total_y) return my_class_weight

keras如何为已经训练好的模型添加层?

已经训练好的model,比如想在后面再添加lstm或者全连接层应该怎么做呢?

TensorFlow如何在训练过程中获取权重值

比如一个两层卷积的网络,我想在每次训练的时候输出第一层卷积的权重值矩阵的数值,来观察随着训练的进行权重值如何更新。请问代码如何实现?

保存keras模型时出现的问题

求助各路大神,小弟最近用keras跑神经网络模型,在训练和测试时都很好没问题,但是在保存时出现问题 小弟保存模型用的语句: json_string = model.to_json() open('my_model_architecture.json', 'w').write(json_string) #保存网络结构 model.save_weights('my_model_weights.h5',overwrite='true') #保存权重 但是运行后会显示Process finished with exit code -1073741819 (0xC0000005) 然后保存权重的.h5文件没有内容 求助各位大神是怎么回事啊

Darknet yolov3训练数据,为何载入迭代200次的数据开始训练控制台却显示从100次开始运行?

如题。 本人在做毕业设计,因疫情影响无法回学校用良好的设备训练模型,只能用自己的计算机硬跑,目标先跑个1000次。 一上午大概能迭代100次,但如果从0到100再继续训练就会在154次左右出现大量的nan,于是我退出,载入100次时候保留的权重成功跑到200并保存有权重文件。 今早我打算故技重施,可载入200次权重文件跑的时候却显示从100开始,然后101,102。我太难了。 有没有懂的兄弟可以说说原因和解决办法?跪谢!

在vs平台上调用yolov3训练好的模型去检测新的图片速度很慢

前段时间做一个事情是基于darknet53网络训练的yolov3的模型,在vs2017平台上基于opencv调用yolo训练出来的权重文件去检测新的图片时发现速度很慢,每张用时300ms的样子,达不到我的要求,样本图片很大 2100X1000,所以现在我想请教一下能有什么方法能加速这个检测过程的么?只说思路也可以。有大神能给提供一个思路没,能在这个基础上速度提升4倍以上就行。

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

立即提问
相关内容推荐