神经网络loss不下降问题 5C

图片说明
如图,使用lstm做预测loss始终不下降。从一开始就在震荡。想知道原因。

2个回答

调参没有调好,lstm的unit太大或者太小,用的损失函数不对,如果是分类,用交叉熵,如果是回归,用mse/mae,batch size太大或者太小,数据导入不对,比如维度错了。
用错激活函数,各种激活函数,sigmoid、relu、tanh都试试看,优化器错误或者参数选择不当,比如建议你用adam,如果用sgd,看看学习率lr是不是过大。
数据本身是难以学习的,比如你lstm去学习随机白噪声曲线,肯定学不出来。

谢谢回答。我做的是回归,用的mse.优化器用adam。
剩下的那些参数都在调试中。再试一下把。谢谢啦

qq_30450813
qq_30450813 你好,你的问题解决了吗?这是不是过拟合了呢?
一年多之前 回复
LaoChengZier
翻滚的老鼠屎 回复caozhy: 好的 谢谢
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 你可以找一个例子数据集,先排除下数据的问题,或者找一个例子程序,排除下你程序的问题
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
lstm加三层感知器的神经网络,预测行人坐标轨迹,loss不下降是怎么原因?

我用两层的lstm编码坐标,然后用三层感知器解码,预测后五帧的轨迹,用的是mse和adam,尝试了从0.00001到0.3的学习率,batch size也改过train loss一直在小幅度的波动,test loss一直不变,想请问出现这种情况是可能是什么原因? ``` import torch import torch.nn as nn import torch.utils.data as data import numpy as np import random from torch import optim from helper import AverageMeter, adjust_learning_rate class net(torch.nn.Module): def __init__(self): super(net, self).__init__() self.gru = nn.GRU(2, 128, 2) self.lstm = nn.LSTM(2, 128, 2) def forward(self, input1, hidden): next_h_list = [] out_list = [] for i in range(20): input_tr = input1[:,i,:].unsqueeze(0) output, next_h = self.lstm(input_tr, (hidden[i][0] , hidden[i][1])) next_h_list.append(next_h) out_list.append(output.squeeze(0)) output_tr = torch.stack(out_list, 1) return output_tr, next_h_list def init_hidden(self, batch_size): return [[torch.zeros(2, batch_size, 128, requires_grad=True).cuda() for _ in range(2)] for _ in range(20)] #这里的维度(2,5,128)是从外向内的,最里面是128维 class decoder(torch.nn.Module): def __init__(self): super(decoder, self).__init__() self.fc1 = torch.nn.Linear(128 , 2) def forward(self, input): de_list = [] for i in range(20): output = self.fc1(input[:,i,:]) de_list.append(output) out = torch.stack(de_list, 1) return out class Model: def init(self): self.lr = 0.1 self.weight_decay = 5e-3 self.n_epochs = 500 self.loss_list = [] self.time_window = 300 self.window_size = 1000 self.m1 = net().cuda() self.m2 = decoder().cuda() self.m1_optim = optim.Adam(self.m1.parameters(), lr = self.lr, weight_decay = self.weight_decay) self.m2_optim = optim.Adam(self.m1.parameters(), lr = self.lr, weight_decay = self.weight_decay) self.batch_size = 256 self.test_times = 5 self.dataload('data/GC.npz') def dataload(self, path): data = np.load(path) tr_X, tr_Y = data['train_X'], data['train_Y'] te_X, te_Y = data['test_X'], data['test_Y'] tr_input = torch.FloatTensor(tr_X) tr_target = torch.FloatTensor(tr_Y) self.tr_input = tr_input.cuda() self.tr_target = tr_target.cuda() self.te_input = torch.FloatTensor(te_X).cuda() self.te_target = torch.FloatTensor(te_Y).cuda() # data loader train = torch.utils.data.TensorDataset(tr_input, tr_target) self.train_loader = torch.utils.data.DataLoader(train, batch_size=self.batch_size, shuffle=True, num_workers=4) def run(self, tr_input, tr_target): batch_size = tr_input.size(0) encoder_hidden = self.m1.init_hidden(batch_size) #print('batch_size: ',batch_size) tr_final = tr_input[:,:,4] #选择第五帧 for i in range(4): output , hidden = self.m1(tr_input[:,:,i], encoder_hidden) re_list = [] for i in range(5): output , hidden = self.m1(tr_final, encoder_hidden) output_decoder = self.m2(output) tr_final = output_decoder re_list.append(output_decoder) predict = torch.stack(re_list, 2) #loss L2_loss = ((tr_target - predict) **2).sum() / 20 MSE_loss = ((tr_target - predict) **2).sum(3).sqrt().mean() self.loss = L2_loss return predict, L2_loss.item(), MSE_loss.item() def train(self, epoch): MSE_loss_meter = AverageMeter() L2_square_loss_meter = AverageMeter() adjust_learning_rate([self.m1_optim, self.m2_optim], self.lr, epoch) for i ,(tr_input, tr_target)in enumerate(self.train_loader): tr_input = tr_input.cuda() tr_target = tr_target.cuda() self.m1_optim.zero_grad() self.m2_optim.zero_grad() predict, L2_loss, MSE_loss = self.run(tr_input, tr_target) MSE_loss_meter.update(MSE_loss) L2_square_loss_meter.update(L2_loss) self.loss.backward() self.m1_optim.step() self.m2_optim.step() return MSE_loss_meter.avg, L2_square_loss_meter.avg def test(self): with torch.no_grad(): predi, L2_square_lo, MSE_lo = self.run(self.te_input, self.te_target) return MSE_lo, L2_square_lo def final(self, epoch): self.init() for i in range(1, epoch + 1): MSE_loss, L2_square_loss = self.train(epoch) print('----------------epoch------------------: ',i+1) print('mse: ', MSE_loss) print('l2: ', L2_square_loss) self.loss_list.append(MSE_loss) if i % self.test_times == 0: test_loss_MSE , test_loss_L2 = self.test() print('----TEST----\n' + 'MSE Loss:%s' % test_loss_MSE) print('----TEST----\n' + 'L2 Loss:%s' % test_loss_L2) def set_random_seed(random_seed=0): np.random.seed(random_seed) torch.manual_seed(random_seed) torch.cuda.manual_seed_all(random_seed) random.seed(random_seed) def main(): set_random_seed() M = Model() M.final(1000) if __name__ == '__main__': main() ```

神经网络按梯度下降训练,不应该用同一个样本迭代直到得到loss最小值?然后再继续下一个样本吗?

在学习神经网络训练方式,梯度下降方法有个疑问 1、如下图所示训练过程,迭代得话,不应该继续用同一个样本计算权重直到得到loss极值? 2、我的理解就是每个样本都对应一个loss极值,不是吗?但是如果用不同样本去训练,用A训练得到一个最小loss适合样本A,用B训练得到适合样本B的最小loss,那就不适合A了啊? ![图片说明](https://img-ask.csdn.net/upload/201907/16/1563289204_340670.png) 3、如下代码怎么理解,每个训练批次和重复使用样本的意义 其中feed_dict函数意义是什么:如果是30000步,每步喂一个批次8个样本是怎么训练的? ``` import tensorflow as tf import numpy as np BATCH_SIZE=8 seed=23455 ####1 样本和标签的生成 #基于seed产生随机数 rng=np.random.RandomState(seed) #随机数返回32行2列的矩阵,作为输入样本 X=rng.rand(32,2) #设置标签Y,给每行样本进行设置:和<1==>1 Y=[[int(x0+x1<1)] for(x0,x1) in X] print('X:\n',X) print('Y:\n',Y) ####2 定义神经网络输入、参数和输出,定义前向网络 x=tf.placeholder(tf.float32,shape=(None,2)) y_=tf.placeholder(tf.float32,shape=(None,1))#True lable #其中的3是隐藏层的神经元个数,列举:只有一个隐藏层(w1,w2) 有两个隐藏层(w1,w2,w3) #n个隐藏层有n+1个权值矩阵 w1= tf.Variable(tf.random_normal([2,3], stddev=1,seed=1)) w2= tf.Variable(tf.random_normal([3,1], stddev=1,seed=1)) a= tf.matmul(x,w1) y= tf.matmul(a,w2) ####3 定义损失函数及反向传播方法 loss=tf.reduce_mean(tf.square(y-y_))#loss函数:均方误差:差的平方和均值 train_step= tf.train.GradientDescentOptimizer(0.001).minimize(loss)#梯度下降方向传播算法 #train_step= tf.train.MomentumOptimizer(0.001,0.9).minimize(loss) #train_step= tf.train.AdamOptimizer(0.001).minimize(loss) ####4 创建会话 with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) #输出未经训练,随机生成的参数 print('w1:\n', sess.run(w1)) print('w2:\n', sess.run(w2)) print('\n') ####5 训练模型 STEPS= 30000 for i in range(STEPS): start=(i*BATCH_SIZE)%32 end = start+BATCH_SIZE sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]}) if i % 500 == 0: total_loss=sess.run(loss, feed_dict={x: X, y_: Y}) print('After %d training steps, loss on all data is %g'%(i, total_loss)) ####6 输出训练后的参数 print('\n') print('w1:\n', sess.run(w1)) print('w2:\n', sess.run(w2)) ```

用keras构建了一个简单神经网络,loss一直卡在0.69不动

试过了改变lr,改变optimizer,权重初始化也有了,但是loss一直卡在0.69,用softmax做了一个二元分类,求大牛帮忙看一下,谢谢!

神经网络训练时,损失值在0.1波动,不再下降,是否认为已经收敛?

在利用卷积神经网络训练一组数据时,损失值从3.7左右下降到0.15左右,之后损失值不再下降,这种情况是否可以认为已经收敛?但此时的测试集准确率只有92%左右,如果想要继续提高准确率,应该从哪方面入手:数据集本身?网络模型?训练参数?还是其它方面? 这是训练的两张图:![图片说明](https://img-ask.csdn.net/upload/202001/10/1578621222_918843.png)![图片说明](https://img-ask.csdn.net/upload/202001/10/1578621233_171361.png)

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 ```

度量学习中三元组损失不收敛(loss无法下降到margin以下,样本的降维输出聚在一起)

最近在搞三元组损失来做分类的任务,用了VGG16模型进行主干网络进行特征提取,最后用triplet loss来约束网络进行学习。 三元组损失是来优化正样本,负样本与锚点之间的距离的,以margin作为阈值。 但是我在训练时发现使用数据增强的情况下triplet loss并不能降到margin以下,反而是停留在margin附近,此时正样本,负样本,锚点距离都为0,聚在了一起。 而不使用数据增强时只要特征维度不是太小loss就可以降到margin以下。 我的学习率设置为0.0005,MomentumOptimizer,momentum=0.9。 是因为样本本身的原因吗?或者是网络本身的原因? 希望能得到大家的指点,感谢。

模型训练过程中loss会突然上升然后下降,然后循环这种状态,什么原因呢?

模型训练过程中loss会突然上升然后下降,然后循环这种状态,这是什么原因呢? ![图片说明](https://img-ask.csdn.net/upload/201906/20/1560994531_246807.png)

为什么训练一个简单的残差网络时,loss并不低,但是acc还可以

使用一个20层左右的一维卷积神经网络来对一组机械振动数据分类, loss训练过50epochs还是0.9,但正确率90%出头,在测试集上也差不多 请问一下是为什么

训练准确率很高,测试准确率很低(loss有一直下降)

tensorflow模型,4层cnn 跑出来的结果训练集能达到1,测试集准确率基本保持在0.5左右,二分类 数据有用shuffle, 有dropout,有正则化,learning rate也挺小的。 不知道是什么原因,求解答! ![图片说明](https://img-ask.csdn.net/upload/201912/11/1576068416_852077.png)

深度神经网络训练过程中,损失函数的值没有变化

我做了一个很简单的全连接神经网络,一个输入层:输入一个三维的 参数,3个隐藏层,一个输出层:输出一个5位分类结果(一个one-hot数据,类似[1,0,0,0,0]属于第一类)。 使用的损失函数的交叉熵函数,使用梯度下降法。但是当我输出loss函数的值的时候,发现训练过程中,loss的值一直没有变化。我无论如何调整隐藏层神经元个数,都没有用。 请问出现问题的原因有哪些呢? 我把代码贴出来,大家看看呢,代码中我试验过很多包括隐藏层数目,这里的是5层,1,2,3,4,5,层都试过,都不对: ``` # -*- coding: utf-8 -*- """ Created on Mon Jul 3 23:03:28 2017 @author: sony """ # -*- coding: utf-8 -*- """ Created on Mon Jul 3 22:39:30 2017 @author: sony """ # -*- coding: utf-8 -*- """ Created on Mon Jul 3 22:03:49 2017 @author: sony """ import tensorflow as tf from numpy.random import RandomState batch_size = 8 w1 = tf.Variable(tf.random_normal([3,300],stddev = 1,seed = 1)) w2 = tf.Variable(tf.random_normal([300,300],stddev = 1,seed = 1)) w3 = tf.Variable(tf.random_normal([300,300],stddev = 1,seed = 1)) w4 = tf.Variable(tf.random_normal([300,300],stddev = 1,seed = 1)) w5 = tf.Variable(tf.random_normal([300,300],stddev = 1,seed = 1)) w6 = tf.Variable(tf.random_normal([300,5],stddev = 1,seed = 1)) basis1 = tf.Variable(tf.zeros([1, 300]) + 0.1) basis2 = tf.Variable(tf.zeros([1, 300]) + 0.1) basis3 = tf.Variable(tf.zeros([1, 300]) + 0.1) basis4 = tf.Variable(tf.zeros([1, 300]) + 0.1) basis5 = tf.Variable(tf.zeros([1, 300]) + 0.1) basis6 = tf.Variable(tf.zeros([1, 5]) + 0.1) x = tf.placeholder(tf.float32,shape=(None,3)) y_= tf.placeholder(tf.float32,shape=(None,5)) a = tf.matmul(x,w1)+basis1 a = tf.nn.relu(a) b = tf.matmul(a,w2)+basis2 b = tf.nn.relu(b) c = tf.matmul(b,w3)+basis3 c = tf.nn.relu(c) d = tf.matmul(c,w4)+basis4 d = tf.nn.relu(d) e = tf.matmul(d,w5)+basis5 e = tf.nn.relu(e) y = tf.matmul(e,w6)+basis6 y = tf.nn.softmax(y) cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0))) train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy) #rdm = RandomState(1) #dataset_size = 128 #X = rdm.rand(dataset_size,2) #Y = [ [int(x1+x2<1)] for (x1,x2) in X] f2 = open("C:/Users/sony/Desktop/points(7).txt") X = [] Y = [] D = f2.read(); rows2 = D.split('\n') for row2 in range(len(rows2)): split_row2 = rows2[row2].split() if split_row2: temp = [] templabel = [] i_label = int(split_row2[0]) for k in range(5):#每一行数据分拆 if k == i_label:#输入标签数据,这里的是表示one hot数据 templabel.append(1) else: templabel.append(0) Y.append(templabel) for i in range(3,6): #if(int(split_row2[i]) - 0 < 1e-3): # split_row2[i] = 1 temp.append(float(split_row2[i])) X.append(temp) with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) #print(w1) #print(w2) dataset_size = len(X) STEPS = 500000 for i in range(STEPS): start = (i*batch_size)%dataset_size end = min(start+batch_size,dataset_size) sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]}) if i %100 == 0: total_cross = sess.run(cross_entropy,feed_dict={x:X,y_:Y}) print("After %d training ,loss is %g"%(i,total_cross)) #print(w1) #print(w2) ```

采用sigmoid激活函数,BCE损失函数进行网络训练,训练过程中loss不断下降,但其精确度acc却一直不变

![图片说明](https://img-ask.csdn.net/upload/202005/10/1589060101_935842.jpg)这是我的精确度计算代码

机器学习后val_loss变成一条直线

为什么val loss会突然下降变成一条直线 ![图片说明](https://img-ask.csdn.net/upload/201903/18/1552875377_661858.png) 可能是哪些参数出现的问题呢 我用的是keras 网络部分的代码如下: ``` model = Sequential() model.add(Dense(512, activation='relu', input_shape=(3600,), kernel_regularizer=regularizers.l1(0.01) # activity_regularizer=regularizers.l1(0.01) # bias_regularizer= regularizers.l1(0.1) )) model.add(Dropout(0.1)) model.add(Dense(256, activation='relu')) model.add(Dense(num_classes, activation='softmax')) model.summary() model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) history = LossHistory() model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=2, validation_data=(x_test, y_test), callbacks=[history] ) ```

LSTM的loss不断下降,但train和test的准确率始终在0.5左右

新人一枚,想用CNN和LSTM分别实现一些垃圾邮件分类,CNN的效果不错,但是在用LSTM的时候,训练过程中loss是不断降低的,但是准确率始终只有0.5左右,测试代码跟cnn的一样,应该没有问题,我是只取了LSTM最后一步的输出来进行分类,请问为什么会出现这样的问题呢?

GAN网络训练过程中,生成器的一项loss会突然断崖式下降到0,然后判别器的loss变为NAN,请问是什么原因?

loss图如下: ![图片说明](https://img-ask.csdn.net/upload/202003/12/1584018545_374462.png) 网上的大多数方法都试了,不起效果

使用keras搭的模型,训练时候,使用相同的loss和metrics,但是输出却不一样

keras搭的模型,训练时候,使用相同的loss和metrics,但是输出却不一样,为什么会出现这种情况呀

迁移学习中进行医学影像分析,训练神经网络后accuracy保持不变。。。

使用的是vgg16的finetune网络,网络权重从keras中导入的,最上层有三层的一个小训练器的权重是由训练习得的。训练集大约300个样本,验证集大约80个样本,但程序运行后,第一二个epoch之间loss、acc还有变化,之后就不再变化,而且验证集的准确度一直接近于零。。想请有关卷积神经网络和机器学习方面的大神帮忙看一下是哪里出了问题 import keras from keras.models import Sequential from keras.layers import Dense,Dropout,Activation,Flatten from keras.layers import GlobalAveragePooling2D import numpy as np from keras.optimizers import RMSprop from keras.utils import np_utils import matplotlib.pyplot as plt from keras import regularizers from keras.applications.vgg16 import VGG16 from keras import optimizers from keras.layers.core import Lambda from keras import backend as K from keras.models import Model #写一个LossHistory类(回调函数),保存loss和acc,在keras下画图 class LossHistory(keras.callbacks.Callback): def on_train_begin(self, logs={}):#在每个batch的开始处(on_batch_begin):logs包含size,即当前batch的样本数 self.losses = {'batch':[], 'epoch':[]} self.accuracy = {'batch':[], 'epoch':[]} self.val_loss = {'batch':[], 'epoch':[]} self.val_acc = {'batch':[], 'epoch':[]} def on_batch_end(self, batch, logs={}): self.losses['batch'].append(logs.get('loss')) self.accuracy['batch'].append(logs.get('acc')) self.val_loss['batch'].append(logs.get('val_loss')) self.val_acc['batch'].append(logs.get('val_acc')) def on_epoch_end(self, batch, logs={}):#每迭代完一次从log中取得数据 self.losses['epoch'].append(logs.get('loss')) self.accuracy['epoch'].append(logs.get('acc')) self.val_loss['epoch'].append(logs.get('val_loss')) self.val_acc['epoch'].append(logs.get('val_acc')) def loss_plot(self, loss_type): iters = range(len(self.losses[loss_type])) #绘图的横坐标? plt.figure() #建立一个空的画布 if loss_type == 'epoch': plt.subplot(211) plt.plot(iters,self.accuracy[loss_type],'r',label='train acc') plt.plot(iters,self.val_acc[loss_type],'b',label='val acc') # val_acc用蓝色线表示 plt.grid(True) plt.xlabel(loss_type) plt.ylabel('accuracy') plt.show() plt.subplot(212) plt.plot(iters, self.losses[loss_type], 'r', label='train loss') # val_acc 用蓝色线表示 plt.plot(iters, self.val_loss[loss_type], 'b', label='val loss') # val_loss 用黑色线表示 plt.xlabel(loss_type) plt.ylabel('loss') plt.legend(loc="upper right") #把多个axs的图例放在一张图上,loc表示位置 plt.show() print(np.mean(self.val_acc[loss_type])) print(np.std(self.val_acc[loss_type])) seed = 7 np.random.seed(seed) #训练网络的几个参数 batch_size=32 num_classes=2 epochs=100 weight_decay=0.0005 learn_rate=0.0001 #读入训练、测试数据,改变大小,显示基本信息 X_train=np.load(open('/image_BRATS_240_240_3_normal.npy',mode='rb')) Y_train=np.load(open('/label_BRATS_240_240_3_normal.npy',mode='rb')) Y_train = keras.utils.to_categorical(Y_train, 2) #搭建神经网络 model_vgg16=VGG16(include_top=False,weights='imagenet',input_shape=(240,240,3),classes=2) model_vgg16.layers.pop() model=Sequential() model.add(model_vgg16) model.add(Flatten(input_shape=X_train.shape[1:])) model.add(Dense(436,activation='relu')) #return x*10的向量 model.add(Dense(2,activation='softmax')) #model(inputs=model_vgg16.input,outputs=predictions) for layer in model_vgg16.layers[:13]: layer.trainable=False model_vgg16.summary() model.compile(optimizer=RMSprop(lr=learn_rate,decay=weight_decay), loss='categorical_crossentropy', metrics=['accuracy']) model.summary() history=LossHistory() model.fit(X_train,Y_train, batch_size=batch_size,epochs=epochs, verbose=1, shuffle=True, validation_split=0.2, callbacks=[history]) #模型评估 history.loss_plot('epoch') 比如: ![实验运行结果:](https://img-ask.csdn.net/upload/201804/19/1524134477_869793.png)

卷积神经网络准确率一开始很高之后一直很低是什么原因

![图片说明](https://img-ask.csdn.net/upload/201910/29/1572351226_28414.png) 训练数据2000个 batchsize为20 这个变化是什么规律呀 均方误差曲线图是上升的趋势

神经网络解决非线性回归问题,调整层数,激活函数等未取得好的效果,求各位大神指导

1.利用神经网络去解决多维非线性回归问题遇到问题 2.代码如下 ``` # --------------------------------------------------------------------------------------------------------------模块导入 import time import matplotlib.pyplot as plt import DNCR.two_dimension.v3_NN.get_data as get_data import tensorflow as tf import numpy as np import DNCR.two_dimension.v3_NN.Normalize_data as Normalize # ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------获取开始时间 start = time.process_time() # ---------------------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------训练数据和待预测数据 # 获得归一化特征数据集 feature_train, feature_new = Normalize.normalize_feature(get_data.get_kn_feature(['Kn30-J-feature.dat', 'Kn30-J-feature.dat']), 1, 1) # 获得归一化标记数据集及每个标记值的数值大小跨度 sign_train, max_min_len = Normalize.normalize_sign(get_data.get_delta_sign(['Kn30-J-sign.dat'])) sign_new = get_data.get_delta_sign(['Kn30-J-sign.dat']) # ---------------------------------------------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------------------------- # 定义placeholder x = tf.placeholder(tf.float32, [None, 5]) # 行不确定,有5列 y = tf.placeholder(tf.float32, [None, 1]) # 每个标记值训练一个神经网络 # ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------神经网络函数 def neural_func(): Weights_L1 = tf.Variable(tf.random_normal([5, 40])) # 5行40列 biases_L1 = tf.Variable(tf.zeros([1, 40])) # biase永远为1行,列数和权重列数保持一致 Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + biases_L1 L1 = tf.nn.sigmoid(Wx_plus_b_L1) Weights_L2 = tf.Variable(tf.random_normal([40, 80])) biases_L2 = tf.Variable(tf.zeros([1, 80])) Wx_plus_b_L2 = tf.matmul(L1, Weights_L2) + biases_L2 L2 = tf.nn.sigmoid(Wx_plus_b_L2) Weights_L3 = tf.Variable(tf.random_normal([80, 40])) biases_L3 = tf.Variable(tf.zeros([1, 40])) Wx_plus_b_L3 = tf.matmul(L2, Weights_L3) + biases_L3 L3 = tf.nn.sigmoid(Wx_plus_b_L3) Weights_L4 = tf.Variable(tf.random_normal([40, 20])) biases_L4 = tf.Variable(tf.zeros([1, 20])) Wx_plus_b_L4 = tf.matmul(L3, Weights_L4) + biases_L4 L4 = tf.nn.sigmoid(Wx_plus_b_L4) # Weights_L5 = tf.Variable(tf.random_normal([20, 100])) # biases_L5 = tf.Variable(tf.zeros([1, 100])) # Wx_plus_b_L5 = tf.matmul(L4, Weights_L5) + biases_L5 # L5 = tf.nn.tanh(Wx_plus_b_L5) # # Weights_L6 = tf.Variable(tf.random_normal([100, 100])) # biases_L6 = tf.Variable(tf.zeros([1, 100])) # Wx_plus_b_L6 = tf.matmul(L5, Weights_L6) + biases_L6 # L6 = tf.nn.tanh(Wx_plus_b_L6) # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------输出层 Weights_L7 = tf.Variable(tf.random_normal([20, 1])) biases_L7 = tf.Variable(tf.zeros([1, 1])) Wx_plus_b_L7 = tf.matmul(L4, Weights_L7) + biases_L7 prediction = tf.nn.tanh(Wx_plus_b_L7) return prediction # ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------神经网络训练 prediction = neural_func() loss = tf.reduce_mean(tf.square(y - prediction)) # 损失函数 train_step = tf.train.GradientDescentOptimizer(0.05).minimize(loss) # 使用梯度下降法训练 result = [] # 结果列表 with tf.Session() as sess: for i in range(len(sign_train)): sess.run(tf.global_variables_initializer()) # 变量初始化 for _ in range(10000): sess.run(train_step, feed_dict={x: feature_train, y: np.transpose(sign_train[i])}) # 训练 print(sess.run(loss, feed_dict={x: feature_train, y: np.transpose(sign_train[i])})) # 输出每步损失值 prediction_value = sess.run(prediction, feed_dict={x: feature_new}) # 获得预测值 result.append(np.transpose(prediction_value*max_min_len[i]).tolist()[0]) # ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------可视化 title_list = ['Delta(hfx)', 'Delta(hfy)', 'Delta(tauxx)', 'Delta(tauxy)', 'Delta(tauyy)', 'Delta(RuRx)', 'Delta(RvRx)', 'Delta(RTRx)', 'Delta(RuRy)', 'Delta(RvRy)', 'Delta(RTRy)'] # 图标题列表 def Visual_func(): for i in range(len(result)): title = title_list[i] plt.title(title, fontsize='xx-large') plt.plot(range(len(result[i])), sign_new[i], c='y', marker='o') plt.plot(range(len(result[i])), result[i], c='b', marker='*') # 设置刻度字体大小 plt.xticks(fontsize=20) plt.yticks(fontsize=20) plt.legend(['Train-I', 'Predict-I'], fontsize=20, loc='best') plt.show() Visual_func() time_length = time.process_time() - start print('运行结束!程序运行时间为:', time_length, 's') ``` 输入与输出也进行了归一化,输出也进行了反归一化,效果一直不好。 如下图所示,第一张图片中每行代表一个样本,第二张图片中每行中的单个数据代表需要得到的非线性回归关系,总共11个关系。 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562725350_489879.png) ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562725464_533903.png) 如果有大佬能帮忙解决,感激不尽。 (导入的模块中有两个自编模块)以及数据还未上传,可以联系找我要。

tensorflow中神经网络优化器问题

训练神经网络的时候不是应该用BP算法吗,为什么tensorflow中用梯度下降算法的优化器 就能实现对于神经网络权值的更新?

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

远程工具,免费

远程工具,免费

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

csma/ca和csma/cd的matlab仿真源代码带有详细的注释

csma/ca和csma/cd的matlab仿真源代码带有详细的注释,载波侦听,随意设置节点数,带有炫酷的图形展示效果。

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

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

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

pokemmo的资源

pokemmo必须的4个rom 分别为绿宝石 火红 心金 黑白 还有汉化补丁 资源不错哦 记得下载

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

无线通信中的智能天线:IS-95和第3代CDMA应用_.pdf

无线通信中的智能天线:IS-95和第3代CDMA应用_.pdf

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

玩转Linux:常用命令实例指南

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

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

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

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Ubuntu18.04安装教程

Ubuntu18.04.1安装一、准备工作1.下载Ubuntu18.04.1 LTS2.制作U盘启动盘3.准备 Ubuntu18.04.1 的硬盘空间二、安装Ubuntu18.04.1三、安装后的一些工作1.安装输入法2.更换软件源四、双系统如何卸载Ubuntu18.04.1新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列...

sql语句 异常 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your

在我们开发的工程中,有时候会报 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ------ 这种异常 不用多想,肯定是我们的sql语句出现问题,下面...

西南交通大学新秀杯数学建模试题

题目比较难,如果符合大家的口味欢迎大家下载哈,提高你的思维想象能力

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

相关热词 c#分级显示数据 c# 不区分大小写替换 c#中调用就java c#正则表达式 验证小数 c# vscode 配置 c#三维数组能存多少数据 c# 新建excel c#多个文本框 c#怎么创建tcp通讯 c# mvc 电子病例
立即提问