精华内容
下载资源
问答
  • 小幺鸡+java部署

    千次阅读 2018-07-05 10:42:36
    1.java部署 下载安装包 进入 http://tomcat.apache.org/download-80.cgi 1.1环境准备 mkdir /usr/local/tomcat cd /usr/local/tomcat wget ...

    1.java部署

    下载安装包

    进入 http://tomcat.apache.org/download-80.cgi

    1.1环境准备

    mkdir /usr/local/tomcat
    cd /usr/local/tomcat 
    wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
    tar xf open-falcon-v0.2.1.tar.gz -C /usr/local/tomcat
    rm -rf open-falcon-v0.2.1.tar.gz
    

    1.2 java准备

    1.2.1 是否安装jdk

    [root@10 ~]# java -version 
    java version "1.8.0_60"
    Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
    Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

    1.2.2 若没有

    sudo yum install java-1.8.0-openjdk.x86_64

    1.2.3 查找java环境变量

    echo $JAVA_HOME
    或
    [admin@broad-heading ~]$ which java
    /usr/bin/java
    [admin@broad-heading ~]$ ll /usr/bin/java
    lrwxrwxrwx 1 root root 22 Jun 11 14:28 /usr/bin/java -> /etc/alternatives/java
    [admin@broad-heading ~]$ ll /etc/alternatives/java
    lrwxrwxrwx 1 root root 73 Jun 11 14:28 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre/bin/java

    1.2.4 修改开机文件

    sudo cp -p /usr/local/tomcat/bin/catalina.sh  /etc/init.d/tomcat
    vim /etc/init.d/tomcat   #在第二行加入
    # chkconfig: 112 63 37
    # description: tomcat server init script
    # Source Function Library
    . /etc/init.d/functions
    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre    #jdk位置
    CATALINA_HOME=/usr/local/tomcat     #tomcat安装位置
    chomd 755 /etc/init.d/tomcatvim /etc/init.d/tomcat   #在第二行加入
    # chkconfig: 112 63 37
    # description: tomcat server init script
    # Source Function Library
    . /etc/init.d/functions
    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre    #jdk位置
    CATALINA_HOME=/usr/local/tomcat     #tomcat安装位置
    chomd 755 /etc/init.d/tomcat

    配置防火墙开启8080 端口  #firewall

    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    
    firewall-cmd --reload

    配置防火墙开启8080 端口 #iptables

    vi /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

    1.2.5 开机

    cd /usr/local/tomcat/bin
    ./startup.sh    #开机
    ./shutdown.sh    #关闭

    2. 部署小幺鸡

    1. 下载小幺鸡 war包

    wget https://github.com/zhoujingjie/xiaoyaoji/releases/download/2.1.62/

    2. 解压

    unzip xiaoyaoji-2.1.62.war  -d /usr/local/tomcat/webapps/ROOT

    3. 建表

    CREATE DATABASE `xiaoyaoji` CHARACTER SET utf8;

    4. 创建表结构

    sql脚本下载地址

    use xiaoyaoji;
    source /tmp/apiManager/doc/xiaoyaoji.sql

    5. 修改配置文件

    /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/config.properties

    6.测试

    启动tomcat 访问:http:ip:port

    展开全文
  • Ubuntu环境下为java部署OpenCV

    千次阅读 2019-05-14 09:40:07
    为了生成一个jar花了80元,经历是...Ubuntu环境下为java部署OpenCV 目标 在Ubuntu16.04系统中,为Java1.8,部署OpenCV3.4,并成功生成Opencv3xx.jar文件。 踩坑总结 部署前最好先安装 Apache Ant 工具 编译...

     

    为了生成一个jar花了80元,经历是惨痛的,所以必须记录下,才能对得起那80元。下面是拿我80元大佬给我写的安装文档,谢谢大佬,谢谢淘宝!

     

    Ubuntu环境下为java部署OpenCV

    目标

    在Ubuntu16.04系统中,为Java1.8,部署OpenCV3.4,并成功生成Opencv3xx.jar文件。

     

    踩坑总结

    1. 部署前最好先安装 Apache Ant 工具
    2. 编译时使用 make -j4 指令,进行多线程优化,加快编译速度
    3. 每一个 ~/.bashrc 都是为每一个用户单独配置的,如经常切换root用户建议直接修改 /etc/bash.bashrc,总之必须使用同一个bash.rc,不能把环境变量分别写在两个文件内,导致检测不到java环境

     

    准备 

    安装java1.8环境:

    1. 使用PC端下载 64位java1.8 jdk: jdk-8u211-linux-x64.tar.gz ,并上传至服务器
    2. 解压安装:

    $ tar -zxvf jdk-8u211-linux-x64.tar.gz # 移动至 /usr 目录下

    $ sudo mv ./jdk1.8.0_211 /usr # 更改目录名为 java

    $ sudo mv ./jdk1.8.0_211 ./java # 修改系统环境变量

    $ sudo vim /etc/bash.bashrc # 直接在末尾添加环境变量(fi 后一行)

    --------------------------------------

    #set Java environment

    export JAVA_HOME=/usr/java

    export JRE_HOME=${JAVA_HOME}/jre

    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

    export PATH=${JAVA_HOME}/bin:$PATH # 保存并退出,使用source命令使之生效

    $ source /etc/bash.bashrc # 查看安装状况

    $ java -version # 若返回以下内容,则安装成功

    --------------------------------------

    java version "1.8.0_211" Java(TM)

    SE Runtime Environment (build 1.8.0_211-b12)

    Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

    # 再输入以下这个,让编译器检测到JAVA环境安装正确

    $ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

     

    下载OpenCV

    1. 使用PC端下载 OpenCV-3.4.6: opencv-3.4.6.zip ,并上传至服务器
    2. 解压下载下来的安装包并移动至 /usr/java 目录

    # 安装 unzip $ sudo apt-get install unzip # 解压至当前目录 $ unzip opencv-3.4.6.zip # 移动至java目录 $ sudo mv ./opencv-3.4.6 /usr/java

     

    安装 Apache Ant

    Wikipedia: Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发

    $ sudo apt-get insatll ant

     

    安装

    1. 准备编译

    # 打开至OpenCV目录

    $ cd /usr/java/opencv-3.4.6

    # 切换至 root 用户

    $ sudo su

    # update一下

    $ apt-get update

    # 安装 cmake

    $ apt-get install cmake # 安装依赖库(最好提前替换好阿里云服务镜像)

    $ apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev # 建立存放编译后文件的文件夹

    $ mkdir build

    $ cd build

     

    2. 开始编译

    # 确定已切换至root用户

    $ cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ../

    # 其他教程采用的是下面这条

    # cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. # 期间可能会下载一个东西,等待一会儿就OK

    --------------------------------------

    -- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz # 查看cpu线程数

    $ grep 'processor' /proc/cpuinfo | sort -u | wc -l\

    # 执行编译指令,请耐心等待

    $ make -j4 (根据电脑cpu线程数确定 -j 后面的数字)

     

    如果  -- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz 超过10分钟仍未响应,点这里查看解决办法

     

    如果出现JAVA显示NO,表示未检测到JAVA环境,未对JAVA进行编译

     

    输入 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 即可

     

    3. 开始安装

    # 确定已切换至root用户并位于 ./build 目录

    $ sudo make install # 添加 OpenCV 的库到路径,从而可以让系统找到

    $ vim /etc/ld.so.conf.d/opencv.conf

    # 执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加以下内容即可

    --------------------------------------

    /usr/local/lib # 退出保存

    # 执行如下命令使得刚才的配置路径生效

    $ ldconfig

    # 配置bash环境变量

    $ vim /etc/bash.bashrc

    # 在最末尾添加

    --------------------------------------

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

    export PKG_CONFIG_PATH # 退出并保存

    # 执行如下命令使得配置生效

    $ source /etc/bash.bashrc

    # 更新

    $ updatedb # 至此所有的配置都已经完成

     

    4. 查看是否编译成功

    $ cd /usr/java/open-cv3.4/build/bin

    $ ls

    # 若出现 opencv-346.jar, 则编译成功

     

    展开全文
  • 选用的深度学习模型有两个,一个是CNN+LSTM模型,一个是GRU模型,这两个模型在GPU服务器上训练好了,然后需要使用Java调用这两个模型,CNN+LSTM使用TensorFlow写的,GRU是用Keras写的,所以需要用Java部署TensorFlow...

    写在前面

    最近在一个自然语言处理方面的项目,选用的深度学习模型有两个,一个是CNN+LSTM模型,一个是GRU模型,这两个模型在GPU服务器上训练好了,然后需要使用Java调用这两个模型,CNN+LSTM使用TensorFlow写的,GRU是用Keras写的,所以需要用Java部署TensorFlow和Keras训练好的深度学习模型。关于这方面的内容网上并不是很多,我也是费了很多周折才完成任务的,这里来总结一下具体有哪些方法可以用,这些方法又有哪些缺陷,以供大家学习交流。

    一、使用Java深度学习框架直接部署

    (1)使用TensorFlow Java API部署TensorFlow模型

    如果我们使用的是TensorFlow训练的模型,那么我们就可以直接使用Java中的TensorFlow API调用模型。这里需要注意的是我们得把训练好的模型保存为.pb格式的文件。具体代码如下:

    # constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, output_node_names=["quest_out"])
    # 写入序列化的 PB 文件
    # with tf.gfile.FastGFile('/home/amax/zth/qa/new_model2_cpu.pb', mode='wb') as f:
    #     f.write(constant_graph.SerializeToString())
    

    然后我们需要在Java使用这个保存好的模型,在pom.xml中引入TensorFlow的依赖

    <dependency>
                <groupId>org.tensorflow</groupId>
                <artifactId>tensorflow</artifactId>
                <version>1.11.0</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.tensorflow/libtensorflow_jni_gpu -->
            <dependency>
                <groupId>org.tensorflow</groupId>
                <artifactId>libtensorflow_jni_gpu</artifactId>
                <version>1.11.0</version>
            </dependency>
    

    导包成功后,在Java中调用模型

    graphDef = readAllBytes(new FileInputStream(new_model2_cpu.pb));
    graph = new Graph();
    graph.importGraphDef(graphDef);
    session = new Session(graph);
    Tensor result = session.runner()
                    .feed("ori_quest_embedding", Tensor.create(wordVecInputSentence))//输入你自己的数据
                    .feed("dropout", Tensor.create(1.0F))
                    .fetch("quest_out") //和上面python保存模型时的output_node_names对应
                    .run().get(0);
    //这样就能得到模型的输出结果了
    

    (2)使用Deeplearning4J Java API部署Keras模型

    如果我们使用的是Keras训练的模型,那么你就可以选择Deeplearning4J 这个框架来调用模型。
    第一步同样是使用Keras保存训练好的模型

    filepath = "query_models"
     
    checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True)
    
    callback_lists = [checkpoint]
    
    model.fit(x, y, epochs=1,validation_split=0.2,callbacks=callback_lists)
    
    

    然后同样是Java项目中pom.xml导入Deeplearning4J 依赖

      <dependency>      
        <groupId>org.deeplearning4j</groupId>      
        <artifactId>deeplearning4j-core</artifactId>
        <version>1.0.0-beta2</version>    
      </dependency>         
      <dependency>      
        <groupId>org.deeplearning4j</groupId>      
        <artifactId>deeplearning4j-modelimport</artifactId>      
        <version>1.0.0-beta2</version>    
      </dependency>                       
    

    库导入成功后,直接使用Java调用保存好的模型

    MultiLayerNetwork model = KerasModelImport.importKerasSequentialModelAndWeights(“query_models”);
    
    

    这样模型就部署成功了,然后关于怎么使用模型这里就不多说了。
    注意:这里需要注意的是Deeplearning4J 只支持部分深度学习模型,有些模型是不支持的,譬如我这里使用的GRU模型就不支持,运行上面代码会出现以下错误。明确指明不支持GRU模型
    在这里插入图片描述
    去Deeplearning4J 官网查询发现确实现在不支持GRU模型,以下是官网截图
    在这里插入图片描述
    所以如果你想使用Deeplearning4J 来部署训练好的模型,请先查看下是否支持你所使用的模型。

    二、使用Python编写服务端

    (1)使用socket实现进程间的通信

    用python构建服务端,然后通过Java向服务端发送请求调用模型,第一种是使用socket实现进程中的通信,代码如下:

    import socket
    import sys
    import threading
    import json
    import numpy as np
    import jieba
    import os
    import numpy as np
    import nltk
    import keras
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.layers import Dropout
    from keras.layers import LSTM,GRU,TimeDistributed
    from keras.callbacks import ModelCheckpoint
    from keras.utils import np_utils
    from gensim.models.word2vec import Word2Vec
    from keras.optimizers import Adam
    from keras.models import load_model
    import pickle
    # nn=network.getNetWork()
    # cnn = conv.main(False)
    # 深度学习训练的神经网络,使用TensorFlow训练的神经网络模型,保存在文件中
    
    w2v_model = Word2Vec.load("word2vec.w2v").wv
    UNK = pickle.load(open('unk.pkl','rb'))
    model = load_model('query_models')
    a = np.zeros((1, 223,200))
    model.predict(a)
    
    
    def test_init(string):
        cut_list = jieba.lcut(string)
        x_test = np.zeros((1, 223,200))
        for i in range(223):
            x_test[0,i,:] = UNK
        for i in range(len(cut_list)):
            if cut_list[i] in w2v_model:
                x_test[0,i,:] = w2v_model.wv[cut_list[i]]   
        return x_test,len(cut_list)
    
    string_list = list()
    def query_complet(string):
        x_test,length = test_init(string)
        y = model.predict(x_test)
        if length>8:
            return
        word1 = w2v_model.wv.most_similar(positive=[y[0][length-1]], topn=2)[0][0]
        word2 = w2v_model.wv.most_similar(positive=[y[0][length-1]], topn=2)[1][0]
        if word1 == '?' or word1 == '?':
            string_list.append(string)
        else:
            new_str = string+word1
            query_complet(new_str)
    
        if word2 == '?' or word2 == '?':
            string_list.append(string)
        else:
            new_str = string+word2
            query_complet(new_str)
            
    def new_query_complet(string):
        query_complet(string)
        return string_list
    
    def main():
        # 创建服务器套接字
        serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        # 设置一个端口
        port = 12345
        # 将套接字与本地主机和端口绑定
        serversocket.bind(("172.17.169.232",port))
        # 设置监听最大连接数
        serversocket.listen(5)
        # 获取本地服务器的连接信息
        myaddr = serversocket.getsockname()
        print("服务器地址:%s"%str(myaddr))
        # 循环等待接受客户端信息
        while True:
            # 获取一个客户端连接
            clientsocket,addr = serversocket.accept()
            print("连接地址:%s" % str(addr))
            try:
                t = ServerThreading(clientsocket)#为每一个请求开启一个处理线程
                t.start()
                pass
            except Exception as identifier:
                print(identifier)
                pass
            pass
        serversocket.close()
        pass
    
    class ServerThreading(threading.Thread):
        # words = text2vec.load_lexicon()
        def __init__(self,clientsocket,recvsize=1024*1024,encoding="utf-8"):
            threading.Thread.__init__(self)
            self._socket = clientsocket
            self._recvsize = recvsize
            self._encoding = encoding
            pass
    
        def run(self):
            print("开启线程.....")
            try:
                #接受数据
                msg = ''
                while True:
                    # 读取recvsize个字节
                    rec = self._socket.recv(self._recvsize)
                    # 解码
                    msg += rec.decode(self._encoding)
                    # 文本接受是否完毕,因为python socket不能自己判断接收数据是否完毕,
                    # 所以需要自定义协议标志数据接受完毕
                    if msg.strip().endswith('over'):
                        msg=msg[:-4]
                        break
                # 发送数据
                self._socket.send("啦啦啦啦".encode(self._encoding))
                pass
            except Exception as identifier:
                self._socket.send("500".encode(self._encoding))
                print(identifier)
                pass
            finally:
                self._socket.close() 
            print("任务结束.....")
            pass
    
    //启动服务        
    main()
    

    Java客户端代码如下:

        public  void test2() throws IOException {
            JSONObject jsonObject = new JSONObject();
            String content = "医疗保险缴费需要";
            jsonObject.put("content", content);
            String str = jsonObject.toJSONString();
            // 访问服务进程的套接字
            Socket socket = null;
    //        List<Question> questions = new ArrayList<>();
    //        log.info("调用远程接口:host=>"+HOST+",port=>"+PORT);
            try {
                // 初始化套接字,设置访问服务的主机和进程端口号,HOST是访问python进程的主机名称,可以是IP地址或者域名,PORT是python进程绑定的端口号
                socket = new Socket("172.17.169.232",12345);
                // 获取输出流对象
                OutputStream os = socket.getOutputStream();
                PrintStream out = new PrintStream(os);
                // 发送内容
                out.print(str);
                // 告诉服务进程,内容发送完毕,可以开始处理
                out.print("over");
                // 获取服务进程的输入流
                InputStream is = socket.getInputStream();
                String text = IOUtils.toString(is);
                System.out.println(text);
        
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {if(socket!=null) socket.close();} catch (IOException e) {}
                System.out.println("远程接口调用结束.");
            }
        }
    

    socket实现Python服务端确实比较简单,但是代码量比较大,没有前面Java直接部署训练好的模型简单。

    (2)使用Python的Flask框架

    Flask框架实现服务端,这个框架我是听我同学说的,因为他们公司就是使用这种方法部署深度学习模型的,不过我们项目当中没有用到,有兴趣的同学可以自己去了解一下这个Flask框架,这里不累述了。

    总结

    常用的方法基本上就上面这些了,以上方法各有各的优缺点,大家可以根据自己的项目需求自行选择合适的方法来部署训练好的深度学习模型,希望这篇博客可以帮到你们。

    展开全文
  • 吐槽下java部署cnn、rnn、lstm、bi-lstm相关模型的我是碰到了各种坑,相比之前部署xgboost采的坑还要多,记录下吧,这些底层还是要依赖于c++,java说白了只是个壳,没有真正实现Tensor、模型相关业务逻辑,下面看...

    吐槽下java部署cnn、rnn、lstm、bi-lstm相关模型的我是碰到了各种坑,相比之前部署xgboost采的坑还要多,记录下吧,这些底层还是要依赖于c++,java说白了只是个壳,没有真正实现Tensor、模型相关业务逻辑,下面看下吧。

    查看各个版本的gcc版本的信息:

    strings /lib64/libc.so.6 |grep GLIBC_   查看版本中是否含有2.14、2.17的版本

    1. GLIBC_2.2.5
    2. GLIBC_2.2.6
    3. GLIBC_2.3
    4. GLIBC_2.3.2
    5. GLIBC_2.3.3
    6. GLIBC_2.3.4
    7. GLIBC_2.4
    8. GLIBC_2.5
    9. GLIBC_2.6
    10. GLIBC_2.7
    11. GLIBC_2.8
    12. GLIBC_2.9
    13. GLIBC_2.10
    14. GLIBC_2.11
    15. GLIBC_2.12
    16. GLIBC_2.13


    部署过程会碰到 下面这两个问题

    cal/tomcat/temp/libtensorflow_jni5656634183295359135.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/tomcat/temp/libtensorflow_jni5656634183295359135.so

    .UnsatisfiedLinkError: /usr/local/tomcat/temp/libtensorflow_jni5135876021127552243.so: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by



    安装步骤不累赘,安装glibc-2.17既可以




    再部署还会可能碰到这个问题:


    cal/tomcat/temp/libtensorflow_jni7225457145314151563.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /usr/local/tomcat/temp/lib


    strings /usr/lib64/libstdc++.so.6|grep GLIBCXX  查看3.x版本的GLIBC  

    1. GLIBCXX_3.4
    2. GLIBCXX_3.4.1
    3. GLIBCXX_3.4.2
    4. GLIBCXX_3.4.3
    5. GLIBCXX_3.4.4
    6. GLIBCXX_3.4.5
    7. GLIBCXX_3.4.6
    8. GLIBCXX_3.4.7
    9. GLIBCXX_3.4.8
    10. GLIBCXX_3.4.9
    11. GLIBCXX_3.4.10
    12. GLIBCXX_3.4.11
    13. GLIBCXX_3.4.12
    14. GLIBCXX_3.4.13
    15. GLIBCXX_3.4.14
    16. GLIBCXX_3.4.15
    17. GLIBCXX_3.4.16
    18. GLIBCXX_3.4.17

    可以看到18、19之后的版本没有,解决办法安装最新的gcc6.x版本,具体安装较为简单,不累赘。


    1. GLIBC_2.2.5
    2. GLIBC_2.2.6
    3. GLIBC_2.3
    4. GLIBC_2.3.2
    5. GLIBC_2.3.3
    6. GLIBC_2.3.4
    7. GLIBC_2.4
    8. GLIBC_2.5
    9. GLIBC_2.6
    10. GLIBC_2.7
    11. GLIBC_2.8
    12. GLIBC_2.9
    13. GLIBC_2.10
    14. GLIBC_2.11
    15. GLIBC_2.12
    16. GLIBC_2.13
    17. GLIBC_2.14
    18. GLIBC_2.15
    19. GLIBC_2.16
    20. GLIBC_2.17
    21. GLIBC_PRIVATE
    1. GLIBCXX_3.4
    2. GLIBCXX_3.4.1
    3. GLIBCXX_3.4.2
    4. GLIBCXX_3.4.3
    5. GLIBCXX_3.4.4
    6. GLIBCXX_3.4.5
    7. GLIBCXX_3.4.6
    8. GLIBCXX_3.4.7
    9. GLIBCXX_3.4.8
    10. GLIBCXX_3.4.9
    11. GLIBCXX_3.4.10
    12. GLIBCXX_3.4.11
    13. GLIBCXX_3.4.12
    14. GLIBCXX_3.4.13
    15. GLIBCXX_3.4.14
    16. GLIBCXX_3.4.15
    17. GLIBCXX_3.4.16
    18. GLIBCXX_3.4.17
    19. GLIBCXX_3.4.18
    20. GLIBCXX_3.4.19
    21. GLIBCXX_3.4.20
    22. GLIBCXX_3.4.21
    23. GLIBCXX_3.4.22
    24. GLIBCXX_FORCE_NEW
    25. GLIBCXX_DEBUG_MESSAGE_LENGTH

    版本完善就可以正常的部署tensorflow训练的模型了,完成


    展开全文
  • 本文为系列博客tensorflow模型部署系列的一部分,用于JAVA语言实现通用模型的部署。本文主要使用pb格式的模型文件,其它格式的模型文件请先进行格式转换,参考tensorflow模型部署系列————预训练模型导出。从模型...
  • Java 部署工具包提供的脚本文件

    千次阅读 2008-11-17 17:35:00
    Java 部署工具包支持快速部署 Java 程序或 Java Web Start 程序。部署工具包脚本文件 提供以下功能:精确检测已安装的 JRE无缝 JRE 安装在单独一行代码中完成程序启动(JRE 检测和必要的升级)在单独的一行代码中...
  • nginx+tomcat+java部署总结

    千次阅读 2017-04-16 00:12:17
    昨天部署了一下nginx+tomcat+java出现了很多问题,以下为整理总结。 使用了两种部署方式,一种是源码部署,一种是war部署。     java源码部署总结: 环境:nginx+tomcat 部署方式:源码部署 1 源码目录 ...
  • 阿里云服务器配置Java部署环境

    万次阅读 2017-06-16 09:26:57
    在阿里云上部署项目搭建环境小记64bit 需要安装的软件列表 本示例java的web项目需要安装如下软件 jdk—(本示例选用如下版本) java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) ...
  • 最近弄了个试用阿里云服务器倒腾了半天终于部署好,分享一下。 1.登入阿里云打开你申请的是云服务器的实例: 点击重置密码---重置密码后重启服务器才能生效(一般需要重置密码。这里设置的密码是使用xhell等工具链接...
  • 下午部署项目出错,maven 引入jstl 是 1.2, 解决如下: 错误: 1.The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xm 2.java.lang.ClassNotFoundException: org.apache.jsp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,073
精华内容 24,429
关键字:

java部署

java 订阅